Вывод последних сообщений форума на сайте

Список разделов phpBBex 1.x (поддерживается) Поддержка 1.x

Описание: У вас проблемы с phpBBex 1.x и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть вопроса. Подробно описывайте проблему. Не забудьте указать версию phpBBex и какие моды установлены, по возможности добавьте скриншоты проблемы или ссылку на страницу с проблемой.
Модератор: Поддержка

Сообщение #21 VEG » 22.04.2013, 01:07

Рарогъ:Ну раз так гласят правила.... тогда да... Интересно... а что гласят эти правила по поводу ответов на заданные вопросы? Нужно ли на них отвечать? или можно просто так.... ну задали и х... с ними... отвечать не обязательно?
Зависит от вопроса. Допустим, если у человека сломался автомобиль, и он задаёт вопрос «Как починить автомобиль?» — лучший ответ, это — «Отвезти в сервис» :)

Если бы вы засекли время, сколько вам понадобилось для того, чтобы написать ваше последнее сообщение — у вас бы, думаю, получилось минут 15, не меньше. Примерно столько же времени пришлось бы потратить отвечающему, а может и больше (если ещё и проверять этот код). Ну а время — не безлимитный ресурс. Поэтому вполне ожидаемо, что объёмный вопрос останется без ответа. Лучше всего выбирать желания в соответствии с вашими возможностями и знаниями. Если знаний не хватает — всегда можно всему научиться, а если где-то споткнулись и не знаете куда копать дальше — знающие люди обязательно подскажут дальнейшее направление движения. Но за вас всё делать никто не будет. Ну, разве что из спортивного интереса кто-нибудь возьмётся, в качестве исключения.

Я сам начал работать с PHP именно из-за своего форума slutsk.net — часто хотелось прикрутить какую-то нестандартную возможность, которую очевидно бесплатно никто не стал бы для меня реализовывать. Понеслось-поехало, и вот уже моему первому форуму почти 9 лет, а я занимаюсь разработкой форка phpBB :)
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #22 Рарогъ » 22.04.2013, 19:33

Я не против. Каждый поступает так, как считает необходимым... или так, как хочет, чтобы поступали с ним. Мне не сложно объяснить подробно, если я конечно хоть что-то понимаю в том, о чем меня спрашивают. Можно и в гугль послать, что в общем-то и делают разные умники, можно направление дать, а можно и помочь с решением, тем более, что это решение тебе самому может пригодиться.... В общем я всех учавствующих поблагодарил... Может с моими возможностями, для изучения PHP (примерно 1 час в день) я когда нибудь и достигну больших высот, ну а пока я на уровне передачи данных методом get и post.... Для более сложных вещей видимо нужно больше времени.... Так что .... Еще раз: Благодарю всех!
Рарогъ M
Автор темы
Аватара
Откуда: Анапа
Репутация: 13
С нами: 11 лет

Сообщение #23 kse » 02.06.2013, 00:50

Рарогъ:Теперь о том, что меня не устаивает (хотя это уже мелочь)... Выдается только тема.... Например тема на форуме создана 01.01.2013, она оттобразилась в новостях... вроде все отлично. но... через 10 дней кто-то написал сообщение в этой теме.... в данной реализации в выдаче будет опять же присутствовать тема с той-же датой создания.... а не датой последней публикации... Другими словами в выдаче всегда будет присутствовать только тема и название форума с новыми сообщениями. а не сами новые сообщения ....
Рарогъ, VEG,Спасибо вам за ваши старания. Сейчас сделал по вашему образцу на нашем сайте. Все работает нормально. Дата выводится от последнего сообщения темы, ссылка идет туда-же - на последнее сообщение.

Изменения я внес лишь в
active-topic.html
Код: Выделить всё
<!-- IF .activetopic -->
   <ul>
   <!-- BEGIN activetopic -->
      <li class="content-corners">
               <b><a href="/forum/{activetopic.U_LAST_POST}" class="topictitle">{activetopic.TOPIC_TITLE}</a>
               <br />
               <i>"{activetopic.LAST_POST_AUTHOR}</b>", {activetopic.LAST_POST_TIME}
               <br /><!-- IF not activetopic.S_TOPIC_GLOBAL -->{L_IN} - "<a href="/forum/{activetopic.U_VIEW_FORUM}">{activetopic.FORUM_TITLE}</a>"
               <!-- ELSE --> ({L_GLOBAL})<!-- ENDIF --></i>
      </li>
   <!-- END activetopic -->
   </ul>
<!-- ENDIF -->
Кому интересно можно посмотреть результат - на сайте, блок справа - "АКТИВНЫЕ ТЕМЫ ФОРУМА"

Только вот еще есть вопрос.
Как сделать, чтоб количество таким образом выводимых тем не было привязанным к настройкам форума в админке (сколько на главной настрою активных тем отображать - столько отображается и на сайте). Можно ли как-то их в этом смысле разделить. То есть - где указать цифру, чтоб не сайте можно было ставить своё количество выводимых тем.

Если кто знает подскажите пожалуйста, если это возможно. :help: ПХП и вставку на на саму страничку сайта оставил без изменений, как изложено тут -

Добавлено спустя 8 минут 10 секунд:
И еще вопрос, почему-то этот блок при заходе на страничку сайта не сразу обновляется, приходится нажимать на F5. хотя на форуме новые темы появляются сразу при нажатии на ссылку - в корень форума... Что сделать чтоб блок на сайте сразу подтягивал новое с форума, при заходе на страничку, а не выводил то что было мне показано ранее? (чтоб не нужно было нажимать на [F5], для обновления)
kse M
Откуда: Украина, Кировоград
Репутация: 1
С нами: 10 лет 10 месяцев

Сообщение #24 VEG » 03.06.2013, 12:25

kse:Как сделать, чтоб количество таким образом выводимых тем не было привязанным к настройкам форума в админке (сколько на главной настрою активных тем отображать - столько отображается и на сайте).
В строке
Код: Выделить всё
display_active_topics('activetopic', $config['active_topics_on_index']);
вместо $config['active_topics_on_index'] впишите нужное вам количество тем.

kse:И еще вопрос, почему-то этот блок при заходе на страничку сайта не сразу обновляется, приходится нажимать на F5.
Перед строкой
Код: Выделить всё
page_header($user->lang['SEARCH_ACTIVE_TOPICS']);
добавьте:
Код: Выделить всё
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
header('Expires: Sat, 24 Oct 1987 07:00:00 GMT');
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #25 kse » 05.06.2013, 09:14

VEG, спасибо, теперь все работает как надо. :dance:
kse M
Откуда: Украина, Кировоград
Репутация: 1
С нами: 10 лет 10 месяцев

Сообщение #26 kse » 05.06.2013, 18:30

Обнаружил еще одну странность:
Если тема обозначена как "Важная"(первое сообщение), она не попадает в список активных тем, ни на главной форума ни на сайте. Но при этом она попадает в "активные темы" при открытии полной страницы "активные темы".

Мне кажется что так не совсем корректно, что разные места "активных тем" фильтруют активные темы по разному. Я всегда смотрю активные темы только на главной странице форума, и такую - "важную тему" обязательно пропущу. А возможно не я один такой, и не только на каком-то одном форуме...

Это так и должно быть, или это ошибка в работе движка? Можно ли это как-то поправить/подстроить...? :cry:
kse M
Откуда: Украина, Кировоград
Репутация: 1
С нами: 10 лет 10 месяцев

Сообщение #27 VEG » 05.06.2013, 18:38

В настройках отображения включите опцию «отображать важные объявления».

Добавлено спустя 2 минуты 31 секунду:
А, вопрос о встроенном блоке. В файл active_topics.php перед строкой:
Код: Выделить всё
display_active_topics('activetopic', $config['active_topics_on_index']);
добавьте строку:
Код: Выделить всё
display_global_announcements('announcetopic');

Ну и переделайте шаблон для вывода важных объявлений по примеру из index_body.html.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #28 kse » 07.02.2014, 17:24

А можно сделать так, чтоб данный блок на сайте - "активные темы" самообновлялся с неким интервалом? Без перезагрузки страницы. Пробовал подставить setInterval... ничего не выходит...
kse M
Откуда: Украина, Кировоград
Репутация: 1
С нами: 10 лет 10 месяцев

Сообщение #29 VEG » 08.02.2014, 11:42

Сделать можно. Готового решения, к сожалению, не подскажу. Самым простым способом будет получение копии этой же страницы по AJAX с каким-то периодом, вытягивание оттуда блока с акивными темами и их обновление на странице, которую просматривает пользователь.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #30 kse » 10.02.2014, 17:20

получение копии этой же страницы по AJAX с каким-то периодом, вытягивание оттуда блока с акивными темами и их обновление на странице, которую просматривает пользователь.
Так оно на сколько я понимаю так и работает - из блока на страничке идет обращение к active-topic.php, тот берет данные, заполняет ими active-topic.html, и передает на страничку сайта, в этот блок:
Код: Выделить всё
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
   <script type="text/javascript">

   jQuery( function($){
    $("#last-topics").load("/forum/active-topic.php");
   });
   </script>
   
   <div id="last-topics">Загрузка...</div>

Остается лишь как-то этот блок(скрипт) на страничке заставить повторятся с определенным интервалом...(5-10минут), в этом и весь вопрос...
Или, "setInterval", сюда вставить невозможно никак? В примерах пишут что с помощью данного оператора можно повторять любую javascript функцию ...

- "Вызов setInterval(функция, задержка) ставит функцию на исполнение через указанный интервал времени."

active-topic.php
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');

// Last active topics
display_global_announcements('announcetopic');
// display_active_topics('activetopic', $config['active_topics_on_index']);
display_active_topics('activetopic', 5);

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
// header('Expires: Sat, 24 Oct 1987 07:00:00 GMT');
header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT");
page_header($user->lang['SEARCH_ACTIVE_TOPICS']);

$template->set_filenames(array(
'body' => 'active-topic.html')
);

page_footer();
active-topic.html
<!-- IF .activetopic -->
<ul>
<!-- BEGIN activetopic -->
<li>
<b><a href="/forum/{activetopic.U_LAST_POST}" class="topictitle">{activetopic.TOPIC_TITLE}</a>
<br />
<i>"{activetopic.LAST_POST_AUTHOR}</b>", {activetopic.LAST_POST_TIME}
<br /><!-- IF not activetopic.S_TOPIC_GLOBAL -->{L_IN} - "<a href="/forum/{activetopic.U_VIEW_FORUM}">{activetopic.FORUM_TITLE}</a>"
<!-- ELSE --> ({L_GLOBAL})<!-- ENDIF --></i>
</li>
<!-- END activetopic -->
</ul>
<!-- ENDIF -->

Извините, но если это сильно сложно, то заморачиваться не стоит... в принципе это не критично, обойдемся.
kse M
Откуда: Украина, Кировоград
Репутация: 1
С нами: 10 лет 10 месяцев

Сообщение #31 VEG » 11.02.2014, 18:04

После строки:
Код: Выделить всё
$("#last-topics").load("/forum/active-topic.php");
Добавьте:
Код: Выделить всё
$("#last-topics").load("/forum/active-topic.php");
setInterval(function(){$("#last-topics").load("/forum/active-topic.php");}, 60000);
По идее после этого раз в 60 секунд будет обновляться.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #32 kse » 12.02.2014, 00:30

VEG, Спасибо... Все работает так как надо... :dance:
Вопрос возник когда на сайте сделали онлайн трансляции нескольких каналов телевидения (новостей) ... Теперь данный блок позволит контролировать состояние форума без перегрузки целой страницы ни на сайте, ни на форуме - не прерывая просмотра, если трансляция с перемоткой то это сбивает место просмотра и не отвлекаясь на другие вкладки. :smile:
kse M
Откуда: Украина, Кировоград
Репутация: 1
С нами: 10 лет 10 месяцев

ВЫВОД ПОСЛЕДНИХ СООБЩЕНИЙ ФОРУМА НА САЙТЕ

Сообщение #33 Данила » 04.01.2015, 00:13

А у меня что то не работает. Последняя версия phpbb. Форум размещен в папке forums

Это active-topic.php

Код: Выделить всё
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
 
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');
 
// Last active topics
display_active_topics('activetopic', $config['active_topics_on_index']);

page_header($user->lang['SEARCH_ACTIVE_TOPICS']);

$template->set_filenames(array(
    'body' => 'active-topic.html')
);
 
page_footer(); ?>

Это active-topic.html

Код: Выделить всё
<!-- IF .activetopic -->
   <ul class="news-forum">
   <!-- BEGIN activetopic -->
      <li class="content-corners">
         <dl>
            <dt>
               <!-- IF activetopic.S_UNREAD_TOPIC -->
               <a href="forums/{activetopic.U_NEWEST_POST}">{NEWEST_POST_IMG}</a> <!-- ENDIF -->
               <a href="forums/{activetopic.U_VIEW_TOPIC}" class="topictitle">{activetopic.TOPIC_TITLE}</a>
               <!-- IF activetopic.S_TOPIC_UNAPPROVED or activetopic.S_POSTS_UNAPPROVED -->
               <a href="forums/{activetopic.U_MCP_QUEUE}">{activetopic.UNAPPROVED_IMG}</a> <!-- ENDIF -->
               <!-- IF activetopic.S_TOPIC_REPORTED -->
               <a href="forums/{activetopic.U_MCP_REPORT}">{REPORTED_IMG}</a><!-- ENDIF --><br />
               <!-- IF activetopic.PAGINATION --><strong class="pagination"><span>{activetopic.PAGINATION}</span></strong><!-- ENDIF -->
               Опубликовано: &raquo; {activetopic.FIRST_POST_TIME}
               <!-- IF not activetopic.S_TOPIC_GLOBAL -->{L_IN}
               <a href="forums/{activetopic.U_VIEW_FORUM}">{activetopic.FORUM_TITLE}</a><!-- ELSE --> ({L_GLOBAL})<!-- ENDIF -->
            </dt>
         </dl>
      </li>
   <!-- END activetopic -->
   </ul>
<!-- ENDIF -->

При открытии _http://сайт.ru/forums/active-topic.php у меня образуется просто белый экран и все.

В чем может быть дело?

Создал только два файла с данным содержимым и все!

Добавлено спустя 1 минуту 59 секунд:
Оочень прошу дать ответ на мое сообщение!
Данила
Гость

Сообщение #34 Sumanai » 04.01.2015, 00:46

Ищите ответ в логах ошибки.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #35 Данила » 04.01.2015, 09:40

Я попробовал сделать просто страницу и все успешно получилось как описано тут /viewtopic.php?t=384
Но вот при выводе последних записей не вышло... Просто белый экран.
Данила
Гость

Сообщение #36 Sumanai » 04.01.2015, 16:50

Могу написать ещё раз- без текста ошибки из логов ничем помочь нельзя, у провидцев новогодние каникулы.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #37 Рарогъ » 10.01.2015, 15:41

Данила:<a href="forums/{activetopic.U_VIEW_TOPIC}" class="topictitle">{activetopic.TOPIC_TITLE}</a>
На сколько я понимаю PHP критично относится к синтаксису.... Точку не поставил и все... не работает. В вашем коде цитируемая строка не входит в конструкцию <IF.....> может в этом проблема?
Рарогъ M
Автор темы
Аватара
Откуда: Анапа
Репутация: 13
С нами: 11 лет

Сообщение #38 BlackFilms » 18.03.2015, 13:36

Спасибо всем участникам темы, за рабочий вариант данного модуля. :smile:
У меня появилась мысль прикрутить аватарки.
Придумал только один вариант реализации, но он не работает:
active-topic.html
Код: Выделить всё
<!-- IF .activetopic -->
   <ul>
   <!-- BEGIN activetopic -->
      <li class="content-corners">
               <b><a href="/forum/{activetopic.U_LAST_POST}" class="topictitle">{activetopic.TOPIC_TITLE}</a>
               <br />
               {activetopic.LAST_POST_ID},<a style="color: {activetopic.LAST_POST_AUTHOR_COLOUR};" href="/forum/{activetopic.U_LAST_POST_AUTHOR}">{activetopic.LAST_POST_AUTHOR}</a></b>, {activetopic.LAST_POST_TIME}
               <br />
      </li>
   <!-- END activetopic -->
   </ul>
<!-- ENDIF -->

В файле functions-display.php добавил следующую строку:
Код: Выделить всё
'LAST_POST_ID'            => $row['forum_last_poster_id'],
В этот массив:
Код: Выделить всё
$template->assign_block_vars($tpl_loopname, array(

Собственно аватарки хотел подгружать так:
Код: Выделить всё
<img src="/forum/images/avatars/upload/{activetopic.LAST_POST_ID}.jpg">

В пхп я только начал разбираться, и наверняка что-то делаю не так :smoke:
Собственно как грамотно вписать id в ссылку?


UPD: РЕШЕНО: я искал не в той строке :biggrin:
вместо:
Код: Выделить всё
'LAST_POST_ID'            => $row['forum_last_poster_id'],
написал:
Код: Выделить всё
'LAST_POST_ID'            => $row['topic_last_poster_id'],
и всё заработало :smile:
BlackFilms
Репутация: 1
С нами: 9 лет

Сообщение #39 uvlecheniehobby.ru » 02.10.2016, 03:29

а для движка phpbb3.0 можно этот мод установить или что то нужно переделать?Я устанавливал,но у меня получилась крупная надпись(НОВОЕ НА ФОРУМЕ) и под ней слово загрузка и ни каких новых тем не было?
Последний раз редактировалось uvlecheniehobby.ru 02.10.2016, 03:31, всего редактировалось 1 раз.
uvlecheniehobby.ru
Репутация: 0
С нами: 7 лет 5 месяцев

Сообщение #40 Sumanai » 02.10.2016, 03:30

Да.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Пред.След.

Вернуться в Поддержка 1.x



cron