Я в принципе не планировал делать его публичным, но поиск верной истины сподвиг меня на этот нелёгкий шаг (файл установки писать очень гиморно - лень, да).
Поэтому не недо пинать меня палками за кривой местами код (и особенно за полное клонирование немаленькой функции в functions.php) - мне просто надо чтоб вы сами посмотрели и сказали что думаете по поводу описанных траблов.
Примечание. Как опция - добавлен ключ $viewtopic_keys, позволяющий не терять опции (порядок отображение, подсветка и т.д.) при перемещению по топику, а также избавляющий от мусора в ссылках когда эти опции отключены.
Файл с инструкциями прилагается (см. аттач). Полный листинг:
Код: Выделить всё
##############################################################
## MOD Title: All topic posts in viewtopic
## MOD Author: Robert Belkin (robbelkin@mail.ru)
## MOD Description: Shows all posts of this current topic at one page
## MOD Version: 1.0 beta
##
## Installation Level: Easy
## Installation Time: ~5 Minutes
## Files To Edit: functions.php
## lang_main.php
## viewforum.php
## viewtopic.php
## Included Files: n/a
##############################################################
## Author Notes: In addition to main function i added $viewtopic_key, that allows
## users not to lose some viewtopic keys in adress string while surfing in viewtopic
## pages and removes unused keys from links.
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################
#
#-----[ OPEN ]------------------------------------------
#
includes/functions.php
#
#-----[ FIND ]------------------------------------------
#
$page_string = $lang['Goto_page'] . ' ' . $page_string;
return $page_string;
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
function generate_pagination_all($base_url, $num_items, $per_page, $start_item, $show_all_posts, $add_prevnext_text = TRUE)
{
global $lang;
$total_pages = ceil($num_items/$per_page);
if ( $total_pages == 1 )
{
return '';
}
if ($show_all_posts == true) {
$add_prevnext_text = false;
}
else {
$on_page = floor($start_item / $per_page) + 1;
}
$page_string = '';
if ( $total_pages > 10 )
{
$init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages;
if ($show_all_posts == true){
for($i = 1; $i < $init_page_max + 1; $i++)
{
$page_string .= '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $init_page_max )
{
$page_string .= ", ";
}
}
if ( $total_pages > 3 )
{
if ( $on_page > 1 && $on_page < $total_pages )
{
$page_string .= ( $on_page > 5 ) ? ' ... ' : ', ';
$init_page_min = ( $on_page > 4 ) ? $on_page : 5;
$init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4;
for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
{
$page_string .= ($i == $on_page) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $init_page_max + 1 )
{
$page_string .= ', ';
}
}
$page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', ';
}
else
{
$page_string .= ' ... ';
}
for($i = $total_pages - 2; $i < $total_pages + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if( $i < $total_pages )
{
$page_string .= ", ";
}
}
}
$page_string .= ' <b>' . $lang['Goto_page_all'] . '</b>';
}
else {
for($i = 1; $i < $init_page_max + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $init_page_max )
{
$page_string .= ", ";
}
}
if ( $total_pages > 3 )
{
if ( $on_page > 1 && $on_page < $total_pages )
{
$page_string .= ( $on_page > 5 ) ? ' ... ' : ', ';
$init_page_min = ( $on_page > 4 ) ? $on_page : 5;
$init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4;
for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
{
$page_string .= ($i == $on_page) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $init_page_max + 1 )
{
$page_string .= ', ';
}
}
$page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', ';
}
else
{
$page_string .= ' ... ';
}
for($i = $total_pages - 2; $i < $total_pages + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if( $i < $total_pages )
{
$page_string .= ", ";
}
}
}
$page_string .= ' <a href="' . append_sid($base_url . "&start=all") . '">' . $lang['Goto_page_all'] . '</a>';
}
}
else
{
if ($show_all_posts == true){
for($i = 1; $i < $total_pages + 1; $i++)
{
$page_string .= '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $total_pages )
{
$page_string .= ', ';
}
}
$page_string .= ' <b>' . $lang['Goto_page_all'] . '</b>';
}
else {
for($i = 1; $i < $total_pages + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $total_pages )
{
$page_string .= ', ';
}
}
$page_string .= ' <a href="' . append_sid($base_url . "&start=all") . '">' . $lang['Goto_page_all'] . '</a>';
}
}
if ( $add_prevnext_text )
{
if ( $on_page > 1 )
{
$page_string = ' <a href="' . append_sid($base_url . "&start=" . ( ( $on_page - 2 ) * $per_page ) ) . '">' . $lang['Previous'] . '</a> ' . $page_string;
}
if ( $on_page < $total_pages )
{
$page_string .= ' <a href="' . append_sid($base_url . "&start=" . ( $on_page * $per_page ) ) . '">' . $lang['Next'] . '</a>';
}
}
$page_string = $lang['Goto_page'] . ' ' . $page_string;
return $page_string;
}
#
#-----[ OPEN ]------------------------------------------
# you can modify other language profiles too
language/lang_english/main.php
#
#-----[ FIND ]------------------------------------------
#
$lang['Goto_page'] = 'Goto page';
#
#-----[ AFTER, ADD ]------------------------------------------
#
$lang['Goto_page_all'] = 'All';
#
#-----[ FIND ]------------------------------------------
#
$lang['Page_of'] = 'Page <b>%d</b> of <b>%d</b>'; // Replaces with: Page 1 of 2 for example
#
#-----[ AFTER, ADD ]------------------------------------------
#
$lang['Page_of_all'] = 'All posts from <b>%d</b> pages'; // Replaces with: All posts from 2 pages for example
#
#-----[ OPEN ]------------------------------------------
# specially for russians ;)
language/lang_russian/main.php
#
#-----[ FIND ]------------------------------------------
#
$lang['Goto_page'] = 'На страницу';
#
#-----[ AFTER, ADD ]------------------------------------------
#
$lang['Goto_page_all'] = 'Все';
#
#-----[ FIND ]------------------------------------------
#
$lang['Page_of'] = 'Страница <b>%d</b> из <b>%d</b>'; // Replaces with: Page 1 of 2 for example
#
#-----[ AFTER, ADD ]------------------------------------------
#
$lang['Page_of_all'] = 'Все сообщения из <b>%d</b> страниц'; // Replaces with: All posts from 2 pages for example
#
#-----[ OPEN ]------------------------------------------
#
viewforum.php
#
#-----[ FIND ]------------------------------------------
#
$goto_page .= ' ] ';
#
#-----[ BEFORE, ADD ]------------------------------------------
#
$goto_page .= ' <a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=" . $topic_id . "&start=all") . '">' . $lang['Goto_page_all'] . '</a>';
#
#-----[ OPEN ]------------------------------------------
#
viewtopic.php
#
#-----[ FIND ]------------------------------------------
#
$start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
#
#-----[ IN-LINE FIND ]------------------------------------------
#
? intval($HTTP_GET_VARS['start'])
#
#-----[ IN-LINE REPLACE WITH ]------------------------------------------
#
$HTTP_GET_VARS['start']
#
#-----[ FIND ]------------------------------------------
#
//
// Find topic id if user requested a newer
// or older topic
//
#
#-----[ BEFORE, ADD ]------------------------------------------
#
$show_all = false;
$post_days_key = false;
$post_order_key = false;
if ($HTTP_GET_VARS['start'] == 'all') {
$show_all = true;
}
else {
$start = intval($HTTP_GET_VARS['start']);
}
if (isset($HTTP_GET_VARS['postdays']) || isset($HTTP_POST_VARS['postdays'])) {
$post_days_key = true;
}
if (isset($HTTP_GET_VARS['postorder']) || isset($HTTP_POST_VARS['postorder'])) {
$post_order_key = true;
}
#
#-----[ FIND ]------------------------------------------
#
$topic_time = $forum_topic_data['topic_time'];
if ( !empty($post_id) )
#
#-----[ REPLACE WITH ]------------------------------------------
#
$topic_time = $forum_topic_data['topic_time'];
if ( !empty($post_id) && $show_all == false )
#
#-----[ FIND ]------------------------------------------
#
//
// Go ahead and pull all data for this topic
//
#
#-----[ AFTER, ADD ]------------------------------------------
#
if ($show_all == true) {
$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt
WHERE p.topic_id = $topic_id
$limit_posts_time
AND pt.post_id = p.post_id
AND u.user_id = p.poster_id
ORDER BY p.post_time $post_time_order";
}
else {
#
#-----[ FIND ]------------------------------------------
#
LIMIT $start, ".$board_config['posts_per_page'];
#
#-----[ AFTER, ADD ]------------------------------------------
#
}
#
#-----[ FIND ]------------------------------------------
#
$resync = FALSE;
#
#-----[ AFTER, ADD ]------------------------------------------
#
if ($show_all == false) {
#
#-----[ FIND ]------------------------------------------
#
elseif (count($postrow) < $board_config['posts_per_page'])
{
$resync = TRUE;
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
}
#
#-----[ FIND ]------------------------------------------
#
//
// Topic watch information
//
#
#-----[ AFTER, ADD ]------------------------------------------
#
$viewtopic_keys = ($start) ? "&start=$start" : '';
$viewtopic_keys .= ($post_days_key == true) ? "&postdays=$post_days" : '';
$viewtopic_keys .= ($post_order_key == true) ? "&postorder=$post_order" : '';
$viewtopic_keys .= ($highlight) ? "&highlight=$highlight" : '';
#
#-----[ FIND ]------------------------------------------
#
$s_watching_topic = "<a href=\"viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&unwatch=topic&start=$start&sid=" . $userdata['session_id'] . '">' . $lang['Stop_watching_topic'] . '</a>';
#
#-----[ IN-LINE FIND ]------------------------------------------
#
$topic_id
#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
" . $viewtopic_keys . "
#
#-----[ FIND ]------------------------------------------
#
$s_watching_topic = "<a href=\"viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id" . $viewtopic_keys . "&watch=topic&sid=" . $userdata['session_id'] . '">' . $lang['Start_watching_topic'] . '</a>';
#
#-----[ IN-LINE FIND ]------------------------------------------
#
$topic_id
#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
" . $viewtopic_keys . "
#
#-----[ FIND ]------------------------------------------
#
$pagination = ( $highlight != '' ) ? generate_pagination("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&postdays=$post_days&postorder=$post_order&highlight=$highlight", $total_replies, $board_config['posts_per_page'], $start) : generate_pagination("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&postdays=$post_days&postorder=$post_order", $total_replies, $board_config['posts_per_page'], $start);
#
#-----[ IN-LINE FIND ]------------------------------------------
#
generate_pagination
#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
_all
#
#-----[ IN-LINE FIND ]------------------------------------------
#
&postdays=$post_days&postorder=$post_order&highlight=$highlight"
#
#-----[ IN-LINE REPLACE WITH ]------------------------------------------
#
" . $viewtopic_keys
#
#-----[ FIND ]------------------------------------------
#
//
// Send vars to template
//
#
#-----[ AFTER, ADD ]------------------------------------------
#
if ($show_all == true) {
$template->assign_vars(array(
'PAGE_NUMBER' => sprintf($lang['Page_of_all'], ceil( $total_replies / intval($board_config['posts_per_page']) )),
);
}
else {
$template->assign_vars(array(
'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / intval($board_config['posts_per_page']) ) + 1 ), ceil( $total_replies / intval($board_config['posts_per_page']) )),
);
}
#
#-----[ FIND ]------------------------------------------
#
'PAGE_NUMBER' => sprintf($lang['Page_of_all'], ceil( $total_replies / intval($board_config['posts_per_page']) )),
#
#-----[ REPLACE WITH ]------------------------------------------
# erase this string
#
#-----[ FIND ]------------------------------------------
#
'S_POST_DAYS_ACTION' => append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . '=' . $topic_id . "&start=$start"),
#
#-----[ IN-LINE FIND ]------------------------------------------
#
'=' . $topic_id . "&start=$start"
#
#-----[ IN-LINE REPLACE WITH ]------------------------------------------
#
"=$topic_id" . $viewtopic_keys
#
#-----[ FIND ]------------------------------------------
#
'U_VIEW_TOPIC' => append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&start=$start&postdays=$post_days&postorder=$post_order&highlight=$highlight"),
#
#-----[ IN-LINE FIND ]------------------------------------------
#
&start=$start&postdays=$post_days&postorder=$post_order&highlight=$highlight"
#
#-----[ IN-LINE REPLACE WITH ]------------------------------------------
#
" . $viewtopic_keys
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM