Страница 9 из 14

Recent topics for JS - последние темы на любой странице

Добавлено: 16.04.2015 17:29
Anvar
С помощью этого расширения вы сможете вывести последние темы форума на любой странице сайта или форума.

Bозможность вывести темы внутри форума в виде бегущей строки, в шапке.
Bозможно вывести темы на странице сайта посредством java script, с текстом и вложениями или просто заголовки тем с ссылками.
3 способа подключения:
Recent Topics for JS.jpg
выбор необходимых форумов осуществляется из админки:

Код: Выделить всё

<script type="text/javascript" src="http://vash-site.com/forum/recent.php"></script>
выбираете форум сами:

Код: Выделить всё

<script type="text/javascript" src="http://vash-site.com/forum/recent.php?forum=id_форума"></script>
Ajax подгрузка:

Код: Выделить всё

<div id="recent_topics"></div>
<script type="text/javascript">
$(document).ready(function() {
   $.ajax({
      url: "http://vash-site.com/forum/recent.php",
      type: "GET",
      cache: true,
      success: function(data) {
         $("#recent_topics").html(data);
      }
   });
});
</script>
Необходим подключённый jquery на сайте.

Версия для 3.3 в сообщении: Recent topics for JS - последние темы на любой странице

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 18.08.2019 11:28
Sheer
alex_1278, http://ford-windstar.ru/forum/recent.php отдает код ошибки 500. Смотри лог ошибок

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 18.08.2019 12:07
Nekstati
alex_1278, метод обрезки текста, который используется в расширении, плохо работает с последними версиями phpBB, т.к. изменился парсер ББ-кодов. Можно попробовать увеличить в админке кол-во символов в тексте до максимума (1999). Это не всегда будет работать, ошибка может снова возникать на больших постах. Можно отключить обрезку, увеличив кол-во символов напр. до 100000 напрямую через базу данных (таблица phpbb_config, поле recent_max_topic_length). Можно в файле ext\bb3mobi\recent_topics\controller\recent.php раскомментировать строку //strip_bbcode($message); - тогда сообщения будут обрезаться без ошибок, но в них будет голый текст без ББ-кодов.

(Для разработчиков.) А вообще корректную обрезку текста можно сделать только через DOM, например с помощью этого: https://github.com/judev/php-htmltruncator.

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 18.08.2019 13:31
alex_1278
Sheer писал(а): 18.08.2019 11:28 alex_1278, http://ford-windstar.ru/forum/recent.php отдает код ошибки 500. Смотри лог ошибок
при авторизации выдавало не 500,а "Cannot load XML: Premature end of data in tag t line 1"
Nekstati писал(а): 18.08.2019 12:07 Можно в файле ext\bb3mobi\recent_topics\controller\recent.php раскомментировать строку //strip_bbcode($message); - тогда сообщения будут обрезаться без ошибок, но в них будет голый текст без ББ-кодов.
Спасибо, раскомментил, заработало!

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 18.08.2019 14:15
Nekstati
alex_1278, 500 в HTTP-заголовках, "Cannot load XML..." в видимом ответе.

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 20.03.2020 13:48
dotez
для 3.2 то есть такое?

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 20.03.2020 14:54
Nekstati
dotez, это расширение работает на 3.2 с поправкой, описанной в моём посте чуть выше.

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 20.03.2020 15:04
Old Human
На 3.3 даже работает (после правок services.yml и routing.yml)

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 13.07.2020 14:11
Ritor1
Old Human писал(а): 20.03.2020 15:04 На 3.3 даже работает (после правок services.yml и routing.yml)
Добрый день! А можно поподробнее? Столкнулся с такой же проблеммой для версии 3.3

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 14.07.2020 6:41
Ritor1
Сам нашел ответы. Оказывается, надо:
1) в ext/bb3mobi/recent_topics/config/routing.yml заменить pattern на path;
2) в ext/bb3mobi/recent_topics/config/services.yml обернуть некоторые поля в '...', вот так:

Код: Выделить всё

services:
    bb3mobi.recent_topics.listener:
        class: bb3mobi\recent_topics\event\listener
        arguments:
            - '@config'
            - '@template'
            - '@controller.helper'
        tags:
            - { name: event.listener }
    bb3mobi.recent_topics.controller:
        class: bb3mobi\recent_topics\controller\recent
        arguments:
            - '@auth'
            - '@config'
            - '@request'
            - '@template'
            - '@dbal.conn'
            - '%core.root_path%'
            - '%core.php_ext%'

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 14.07.2020 9:34
Ritor1
Добрый день!
Столкнулся с новой проблемой. При вставке скрипта на странице сайта, выдает следующую ошибку:

Код: Выделить всё

"Cross-Origin Read Blocking (CORB) blocked cross-origin response https://demo.ru/app.php/recent.php with MIME type text/html. See https://www.chromestatus.com/feature/5629709824032768 for more details.
"
Подскажите как это лечится. Спасибо

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 14.07.2020 13:54
Ritor1
Нашел решение:
в .htaccess дополнил

Код: Выделить всё

<FilesMatch "\.(php)$">
	<IfModule mod_headers.c>
		Header add Access-Control-Allow-Origin "*" 
		Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
		Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
	</IfModule>
</FilesMatch>
Это заработало. Но оказалось что ajax дергает всю страницу, а мне надо только фрейм с топиками. Через js не пойдет, т.к. там списком(ul.li), и нет полей Темы, Сообщения, Последнее сообщение. Кто знает как это делается?

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 14.07.2020 14:22
rxu
Ritor1 писал(а): 14.07.2020 13:54 а мне надо только фрейм с топиками. Через js не пойдет, т.к. там списком
А разве не в шаблоне стиля в расширении прописано, что и как выводится?

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 15.07.2020 7:20
Ritor1
rxu писал(а): 14.07.2020 14:22 А разве не в шаблоне стиля в расширении прописано, что и как выводится?
Действительно вывод можно настроить в файле ext/bb3mobi/recent_topics/styles/all/template/recent_body.html. Вот бы теперь знать какие переменные хранят количество ответом, просмотров и данные последнего сообщения. Помогите кто знает. Спасибо

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 15.07.2020 8:48
rxu
Ritor1, все стандартно. Открываете файл controller/recent.php и ищете там присвоение переменных шаблона.

Код: Выделить всё

			$this->template->assign_block_vars('topicrow', array(
				'U_TOPIC'		=> $viewtopic_url . '?t=' . $row['topic_id'],
				'U_LAST_POST'	=> $viewtopic_url . '?p=' . $row['topic_last_post_id'] . '#' . $row['topic_last_post_id'],
				'TOPIC_TITLE' 	=> $topic_title,
				'TOPIC_REPLIES'	=> (isset($replies)) ? $replies : '',
			));
Соответственно, эти переменные в шаблоне и будут содержать вывод, например, {topicrow.TOPIC_REPLIES} и другие. Имена переменных говорят сами за себя.

Re: Recent topics for JS - последние темы на любой странице

Добавлено: 15.07.2020 12:31
Ritor1
rxu, большое спасибо. Разобрался как получить количество ответов, а вот количество просмотров и данные последнего сообщения не нашел.

Отправлено спустя 2 часа 12 минут 51 секунду:
Нашел:

Код: Выделить всё

'U_LAST_POST_AUTHOR'	        => get_username_string('profile', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
'LAST_POST_SUBJECT'		=> $last_post_subject,
'LAST_POST_TIME_RFC3339'	=> gmdate(DATE_RFC3339, $row['topic_last_post_time']),
'TOPIC_TITLE' 	                        => $topic_title,
'LAST_POST_AUTHOR'	        => $row['topic_last_poster_name'],
'VIEWS'				        => $row['topic_views'],
Теперь бы понять как формат даты поменять в удобочитаемый. LAST_POST_TIME_RFC3339 выдает 2020-07-15T06:42:17+00:00.
А 'LAST_POST_TIME' => $user->format_date($row['topic_last_post_time']), не получается, т.к. не знаю как с user'ом работать. Помогите кто знает.