Тема: И снова "Все/All" в навигации 1.2.хх
Как данная вещь сделана у меня.
Замечание: Ссылка "Все/All" в темах у меня появляется только если число сообщений в теме не больше 300 (не чего сервер грузить и открывать длинные темы разом
).
0. В языковых файлах common.php должен быть добавлен элемент массива 'All'
'All' => 'Все','All' => 'All',1. В файле functions.php ф-ия paginate изменена до вот такого состояния:
//
// Generate a string with numbered links (for multipage scripts)
//
// START http://punbb.ru/viewtopic.php?id=1935
// ADD
function paginate($num_pages, $cur_page, $link_to)
{
/// MOD VIEW ALL PAGES IN ONE BEGIN
global $lang_common, $action, $cur_topic;
$active_all = true;
/// MOD VIEW ALL PAGES IN ONE END
$pages = array();
$link_to_all = false;
// If $cur_page > $num_pages, we show link to all pages
if ($cur_page > $num_pages)
{
$active_all = false;
$link_to_all = true;
$cur_page--;
}
// If $cur_page == -1, we link to all pages (used in viewforum.php)
if ($cur_page == -1)
{
$cur_page = 1;
$link_to_all = true;
}
if ($num_pages <= 1)
if ($action == 'all')
$pages = array('<strong>'.$lang_common['All'].'</strong>');
else
$pages = array('<strong>1</strong>');
else
{
if (!$link_to_all && $cur_page > 1)
$pages[] = '<a href="'.$link_to.($cur_page == 2 ? '' : '&p='.($cur_page-1)).'"><strong>«</strong></a>';
// $pages[] = '<a href="'.$link_to.'&p='.($cur_page-1).'"><strong>«</strong></a>';
if ($cur_page > 3)
{
// $pages[] = '<a href="'.$link_to.'&p=1">1</a>';
$pages[] = '<a href="'.$link_to.'">1</a>';
if ($cur_page != 4)
$pages[] = '…';
}
// Don't ask me how the following works. It just does, OK? :-)
for ($current = $cur_page - 2, $stop = $cur_page + 3; $current < $stop; ++$current)
{
if ($current < 1 || $current > $num_pages)
continue;
else if ($current != $cur_page || $link_to_all)
// $pages[] = '<a href="'.$link_to.'&p='.$current.'">'.$current.'</a>';
$pages[] = '<a href="'.$link_to.($current == 1 ? '' : '&p='.$current).'">'.$current.'</a>';
else
$pages[] = '<strong>'.$current.'</strong>';
}
if ($cur_page <= ($num_pages-3))
{
if ($cur_page != ($num_pages-3))
$pages[] = '…';
$pages[] = '<a href="'.$link_to.'&p='.$num_pages.'">'.$num_pages.'</a>';
}
if (!$link_to_all && $cur_page < $num_pages)
$pages[] = '<a href="'.$link_to.'&p='.($cur_page+1).'"><strong>»</strong></a>';
/// MOD VIEW ALL PAGES IN ONE BEGIN
if (!$active_all) $pages[] = $lang_common['All'];
else if ((isset($cur_topic['num_replies']) && $cur_topic['num_replies'] < 300) || !isset($cur_topic['num_replies']))
$pages[] = '<a href='.$link_to.'&action=all>'.$lang_common['All'].'</a>';
/// MOD VIEW ALL PAGES IN ONE END
}
return implode(' ', $pages);
}
// END http://punbb.ru/viewtopic.php?id=19352. В файле viewforum.php после
if ($pun_user['g_read_board'] == '0')
message($lang_common['No view']);добавляем это
$action = isset($_GET['action']) ? $_GET['action'] : null;А перед этим
// Determine the topic offset (based on $_GET['p'])
$num_pages = ceil($cur_forum['num_topics'] / $pun_user['disp_topics']);добавляем это
// All topic in forum
if ($action == 'all')
$pun_user['disp_topics'] = $cur_forum['num_topics'] + 1; 3. В файле viewtopic.php после этого
if ($pun_user['g_read_board'] == '0')
message($lang_common['No view']);ставим это
$action = isset($_GET['action']) ? $_GET['action'] : null;А после этого
$cur_topic = $db->fetch_assoc($result);ставим это
// START Mod title: View All Posts In Topic
// ADD
if ($action == 'all' && $pid == 0 && $cur_topic['num_replies'] < 300) {
$pun_user['disp_posts'] = $cur_topic['num_replies'] + 1;
}
// END Mod title: View All Posts In Topic4. В юзерлисте ссылка "Все/All" у меня полностью отключена, для этого там принудительно прописано число ответов в теме = 1000
(изменения вносим в файл userlist.php).
Перед этим
// Generate paging links
$paging_links = $lang_common['Pages'].': '.paginate($num_pages, $p, 'userlist.php?username='.urlencode($username).'&show_group='.$show_group.'&sort_by='.$sort_by.'&sort_dir='.strtoupper($sort_dir));нужно поставить это
// ограничиваем вывод ссылки ALL
$cur_topic['num_replies'] = 1000;5. В личных сообщениях (файл message_list.php)
Замечание: Речь идет о моде Private Messaging System (PMS) hcs EDITION + редакция trijin (1.2.2 edition 3). На стандартном не пойдет без исправлений наверное, так как в этой редакции (если не ошибаюсь) были введены новые переменные для оптимизации кол-ва запросов к базе.
В начале, перед этим
if ($box!=1 && $box!=2)
$box = 0;ставим это
$action = isset($_GET['action']) ? $_GET['action'] : null;Это
else if (isset($_GET['action']) && $_GET['action'] == 'markall')меняем на это
else if ($action == 'markall')Перед этим
$num_pages = ceil($num_messages / $pms_mess_per_page);ставим это
if ($action == 'all')
$pms_mess_per_page = $num_messages + 1;
else
$pms_mess_per_page = $pun_config['o_pms_mess_per_page'];Этот код
$subject = '<a href="message_list.php?id='.$cur_mess['id'].'&p='.$p.'&box='.(int)$box.'">'.pun_htmlspecialchars($cur_mess['subject']).'</a>';заменяем на этот
$subject = '<a href="message_list.php?id='.$cur_mess['id'].'&'.($action=='all' ? 'action=all' : 'p='.$p).'&box='.(int)$box.'">'.pun_htmlspecialchars($cur_mess['subject']).'</a>';Это
$cols = isset($_GET['action']) ? '4' : '3';заменяем на это
$cols = isset($action) ? '4' : '3';На этом кажется все.
З.Ы. Как все работает можно увидеть на моем форуме ![]()
UP
6. В поиске (файл search.php) нужно внести такие изменения:
После этого кода
// Determine the topic or post offset (based on $_GET['p'])
$per_page = ($show_as == 'posts') ? $pun_user['disp_posts'] : $pun_user['disp_topics'];ставим этот код
// START Mod title: View All Posts In Topic
if ($action == 'all')
$per_page = $num_hits; А этот код
if ($num_pages_topic > 1)
$subject_multipage = '[ '.paginate($num_pages_topic, -1, 'viewtopic.php?id='.$search_set[$i]['tid']).' ]';
elseменяем на этот
if ($num_pages_topic > 1) {
// ограничиваем вывод ссылки ALL
$cur_topic['num_replies'] = $search_set[$i]['num_replies'];
$subject_multipage = '[ '.paginate($num_pages_topic, -1, 'viewtopic.php?id='.$search_set[$i]['tid']).' ]';
} elseP.S. Кажется все для поиска.
UP
7. ВСЕ для плагина репутации (файл reputation.php).
Reputation Plugin for PunBB
----------------------------
-- Version 2.2.2
-- (c) Copyright 2006-2007 hcs hcs@mail.ruИщем код
list($num_rows) = $db->fetch_row($result);
if ($num_rows>0)
{
$num_pages = ceil(($num_rows + 1) / $pun_user['disp_posts']);и делаем из него такой код
list($num_rows) = $db->fetch_row($result);
if ($num_rows>0)
{
// START Mod title: View All Posts In Topic
$action = isset($_GET['action']) ? $_GET['action'] : null;
$cur_topic['num_replies'] = $num_rows;
if ($action == 'all' && $num_rows < 300)
$pun_user['disp_posts'] = $num_rows + 1;
// END Mod title: View All Posts In Topic
$num_pages = ceil(($num_rows + 1) / $pun_user['disp_posts']);