Пользователи привыкли на старом форуме выбирать период времени для просмотра новых сообщений. Это было реализовано в виде выпадающего списка с опциями (за час, пять часов, за день, два дня, неделю, месяц и т.д.)
После переноса форума на phpbb 3.1.9 оказалось, что такой возможности в нем нет.
Подскажите, пожалуйста, нет ли какого-либо расширения, на базе которого можно было такую функцию реализовать?
Или может быть можно сам файл search.php, выводящий новые сообщения, как-то доработать?
Пользователи просят сделать такую возможность при клике по ссылке "Новые сообщения" /forum/search.php?search_id=newposts в меню форума.
Вот как это было сделано на старом форуме:
Буду признательна за любые советы по теме.
Вывод новых сообщений за день (час, пять часов.)
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение

-
- phpBB 1.4.1
- Сообщения: 40
- Стаж: 8 лет 6 месяцев
Вывод новых сообщений за день (час, пять часов.)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Former team member
- Сообщения: 3468
- Стаж: 11 лет
- Благодарил (а): 39 раз
- Поблагодарили: 792 раза
Re: Вывод новых сообщений за день (час, пять часов.)
UltimaThule, в активных темах в самом низу есть выпадающий список, но там крупные интервалы.
-
- phpBB 1.4.1
- Сообщения: 40
- Стаж: 8 лет 6 месяцев
Re: Вывод новых сообщений за день (час, пять часов.)
LavIgor, спасибо за подсказку. Попыталась вывести такой же выпадающий список в новых сообщениях. Но ничего не вышло, к сожалению.
Добавила в файл search.php еще один case 'active_posts' . В нем взяла sql-запрос из кейса 'newposts', а условие сортировки из кейса 'active_topics'.
Получился вот такой код:
Измененные строки отмечены в коде звездочками ***
Результаты должны отображаться по ссылке http://kiosks.ru/forum/search_new.php?s ... tive_posts
Код, естественно, тут же выдал SQL-ошибку.
Может быть, уже кто-то разбирался с подобной задачей и сможет подсказать, как правильно построить запрос?
Отправлено спустя 22 минуты 55 секунд:
upd. Ошибку сама нашла и исправила. Но выпадающий список интервалов все-равно не выводится
Добавила в файл search.php еще один case 'active_posts' . В нем взяла sql-запрос из кейса 'newposts', а условие сортировки из кейса 'active_topics'.
Получился вот такой код:
Код: Выделить всё
case 'active_posts':
$l_search_title = $user->lang['SEARCH_NEW'];
// force sorting
$show_results = (request_var('sr', 'topics') == 'posts') ? 'posts' : 'topics';
$sort_key = 't';
$sort_dir = 'd';
***$sort_days = request_var('st', 7);
$sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
$sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
$s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '';
***$last_post_time_sql = ($sort_days) ? ' AND t.topic_last_post_time > ' . (time() - ($sort_days * 24 * 3600)) : '';
if ($show_results == 'posts')
{
$sql = 'SELECT p.post_id
FROM ' . POSTS_TABLE . ' p
WHERE p.post_time > ' . $user->data['user_lastvisit'] . '
AND ' . $m_approve_posts_fid_sql . '
' . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . "
$sql_sort";
$field = 'post_id';
}
else
{
$sql = 'SELECT t.topic_last_post_time, t.topic_id
FROM ' . TOPICS_TABLE . ' t
***WHERE $last_post_time_sql
AND t.topic_moved_id = 0
AND ' . $m_approve_topics_fid_sql . '
' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . "
$sql_sort";
$field = 'topic_id';
}
break;
Результаты должны отображаться по ссылке http://kiosks.ru/forum/search_new.php?s ... tive_posts
Код, естественно, тут же выдал SQL-ошибку.
Может быть, уже кто-то разбирался с подобной задачей и сможет подсказать, как правильно построить запрос?
Отправлено спустя 22 минуты 55 секунд:
upd. Ошибку сама нашла и исправила. Но выпадающий список интервалов все-равно не выводится

-
- phpBB 1.4.1
- Сообщения: 40
- Стаж: 8 лет 6 месяцев
Re: Вывод новых сообщений за день (час, пять часов.)
Уточню вопрос. Вдруг кто-то знает, как это сделать...
Как на странице Новых сообщений (search.php?search_id=newposts) вывести такой же выпадающий список интервалов времени, как в Активных темах (search.php?search_id=active_topics)?
Как на странице Новых сообщений (search.php?search_id=newposts) вывести такой же выпадающий список интервалов времени, как в Активных темах (search.php?search_id=active_topics)?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- phpBB 2.0.4
- Сообщения: 416
- Стаж: 9 лет 7 месяцев
- Благодарил (а): 48 раз
- Поблагодарили: 34 раза
Re: Вывод новых сообщений за день (час, пять часов.)
UltimaThule, есть расширение вывода по дате [3.1][beta] Find-posts-topics-by-date, я так считаю, что окно ввода даты лучше переместить в форму "Новые сообщения" + добавить листалку по датам. В общем, интегрировать со стандартными "новыми сообщениями". А по часам пока ничего не знаю. Ну и я не уверена, что это так нужно, видеть нарезку по часам, если по ссылке из списка новых уже переходили, то это видно. Более разумным кажется желание усовершенствовать вывод через возможности разбивки и отбора по форумам. А если нужно увидеть все новые и непрочитанные на главной - есть специальные другие расширения.
-
- phpBB 1.4.1
- Сообщения: 40
- Стаж: 8 лет 6 месяцев
Re: Вывод новых сообщений за день (час, пять часов.)
Итоговый код:
Отправлено спустя 8 минут 10 секунд:
Выпадающий список удалось таки вывести в нужном месте. Оказалось, для этого достаточно было заменить строку
на
Теперь другая проблема. В файле navbar_header.html нужно вывести ссылку на /search.php?search_id=active_posts
Пока вставила ее в таком виде:
Но это не комильфо, разумеется. Надо как-то ввести для новой менюхи переменные, аналогичные {U_SEARCH_NEW} и {L_SEARCH_NEW}
Попыталась найти поиском, где определяются {U_SEARCH_NEW} и {L_SEARCH_NEW}, чтобы туда же добавить свои. Но поиск ничего не дал.
Подскажите, пожалуйста, где эти переменные прописаны?
Отправлено спустя 5 минут 14 секунд:
Насчет разбивки по форумам - это еще предстоит сделать. Оно тоже было на старом форуме, и пользователи просят сделать его и на новом. Но надо сначала закончить с выводом по интервалам.
Отправлено спустя 17 минут 29 секунд:
Код: Выделить всё
case 'active_posts':
$l_search_title = $user->lang['SEARCH_ACTIVE_POSTS'];
// force sorting
$show_results = (request_var('sr', 'topics') == 'posts') ? 'posts' : 'topics';
$sort_key = 't';
$sort_dir = 'd';
$sort_days = request_var('st', 1);
$sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
$sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
$s_sort_key = $s_sort_dir = '';
$last_post_time_sql = ($sort_days) ? ' AND t.topic_last_post_time > ' . (time() - ($sort_days * 24 * 3600)) : '';
if ($show_results == 'posts')
{
$sql = 'SELECT p.post_id
FROM ' . POSTS_TABLE . ' p
WHERE p.post_time > ' . $user->data['user_lastvisit'] . '
AND ' . $m_approve_posts_fid_sql . '
' . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . "
$sql_sort";
$field = 'post_id';
}
else
{
$sql = 'SELECT t.topic_last_post_time, t.topic_id
FROM ' . TOPICS_TABLE . " t
WHERE t.topic_moved_id = 0
$last_post_time_sql
AND " . $m_approve_topics_fid_sql . '
' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . '
ORDER BY t.topic_last_post_time DESC';
$field = 'topic_id';
}
break;
Выпадающий список удалось таки вывести в нужном месте. Оказалось, для этого достаточно было заменить строку
Код: Выделить всё
$s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '';
Код: Выделить всё
$s_sort_key = $s_sort_dir = '';
Пока вставила ее в таком виде:
Код: Выделить всё
<li class="small-icon icon-new-posts"><a href="/forum/search.php?search_id=active_posts" role="menuitem">Новые сообщения за период</a></li>
Код: Выделить всё
<li class="small-icon icon-search-new"><a href="{U_SEARCH_NEW}" role="menuitem">{L_SEARCH_NEW}</a></li>
Подскажите, пожалуйста, где эти переменные прописаны?
Отправлено спустя 5 минут 14 секунд:
Спасибо за расширение. Буду смотреть его. Но на первый взгляд, это не совсем то, что мне нужно.Вчерашний борщ писал(а): UltimaThule, есть расширение вывода по дате [3.1][beta] Find-posts-topics-by-date, я так считаю, что окно ввода даты лучше переместить в форму "Новые сообщения" + добавить листалку по датам. В общем, интегрировать со стандартными "новыми сообщениями". А по часам пока ничего не знаю. Ну и я не уверена, что это так нужно, видеть нарезку по часам, если по ссылке из списка новых уже переходили, то это видно. Более разумным кажется желание усовершенствовать вывод через возможности разбивки и отбора по форумам. А если нужно увидеть все новые и непрочитанные на главной - есть специальные другие расширения.
Насчет разбивки по форумам - это еще предстоит сделать. Оно тоже было на старом форуме, и пользователи просят сделать его и на новом. Но надо сначала закончить с выводом по интервалам.
Отправлено спустя 17 минут 29 секунд:
Нашла сама. Оказались в includes/functions.php