Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[BETA] All topic posts in viewtopic

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
robbelkin
phpBB 1.2.1
Сообщения: 24
Стаж: 18 лет

[BETA] All topic posts in viewtopic

Сообщение robbelkin »

Обсуждение проблемы, возникшей у меня при тестировании этого мода - см. здесь.

Я в принципе не планировал делать его публичным, но поиск верной истины сподвиг меня на этот нелёгкий шаг (файл установки писать очень гиморно - лень, да).

Поэтому не недо пинать меня палками за кривой местами код (и особенно за полное клонирование немаленькой функции в 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 .= '&nbsp; <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 .= '&nbsp; <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 .= '&nbsp; <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 .= '&nbsp; <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>&nbsp;&nbsp;' . $page_string;
		}

		if ( $on_page < $total_pages )
		{
			$page_string .= '&nbsp;&nbsp;<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 .= '&nbsp; <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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
robbelkin
phpBB 1.2.1
Сообщения: 24
Стаж: 18 лет

Сообщение robbelkin »

Ну что?
lusever
phpBB 1.4.2
Сообщения: 66
Стаж: 19 лет 1 месяц

Сообщение lusever »

Что про опции плохо понятно.
Порядок отображение зависит от кук. Подсветка вроде тоже сохраняется.
Я не понял, зачем?
Аватара пользователя
Vladson
Former team member
Сообщения: 816
Стаж: 19 лет 11 месяцев
Откуда: Estonia, Tallinn

Сообщение Vladson »

Как уже говорилось раньше (и не раз) этот мод задосит сервак, лучше сделать его доступным только для админов и то ставить только на не сильно загруженных форумах...

Я например себе ставил в своё время так

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

#
#-----[ OPEN ]------------------------------------------
#
viewtopic.php

#
#-----[ FIND ]------------------------------------------
#
//
// Start initial var setup
//
#
#-----[ AFTER, ADD ]------------------------------------------
#
if ( $HTTP_GET_VARS['super'] == 'secret' )
{
    $board_config['posts_per_page'] = 10000;
}
Таким образом и установка занимает меньше минуты, и знают об этом мало человек (только те кто имеют доступ к коду) и в использовании не сложен...

Позднее понял что лучше сделать ещё проще

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

#
#-----[ OPEN ]------------------------------------------
#
viewtopic.php

#
#-----[ FIND ]------------------------------------------
#
//
// End session management
//
#
#-----[ AFTER, ADD ]------------------------------------------
#
if ( $userdata['user_id'] == 2 ) // где 2 это id моего(вашего) пользователя
{
    $board_config['posts_per_page'] = 10000; // где 10000 это кол-во постов на страницу
}
Серый цвет - светлый (светлее чёрного), но он и тёмный (темнее белого), он же промежуточный (между чёрным и белым). Теорию относительности никто не отменял. Истина в целом - понятие виртуально-ситуативное.
robbelkin
phpBB 1.2.1
Сообщения: 24
Стаж: 18 лет

Сообщение robbelkin »

lusever писал(а):Что про опции плохо понятно.
Порядок отображение зависит от кук.
Интересно каким образом.
lusever писал(а):Подсветка вроде тоже сохраняется.
С чего вдруг, если она передаётся только POST'ом или GET'ом, причём POST возможен только в формах (<form></form>)?

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

Я не настолько сообразителен и не настолько хорошо знаю кухню phpBB, чтобы придумать решение самостоятельно, поэтому и обращаюсь за помощью.

Удручает, что никто не пытается ничего даже предложить - мозгастых людей на форуме много, но они видимо не хотят заморачиваться.

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

Добавлено спустя 4 минуты 53 секунды:
robbelkin писал(а):#
#-----[ IN-LINE FIND ]------------------------------------------
#
? intval($HTTP_GET_VARS['start'])

#
#-----[ IN-LINE REPLACE WITH ]------------------------------------------
#
$HTTP_GET_VARS['start']
Опечатка!

Должно быть:

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

#-----[ IN-LINE FIND ]------------------------------------------ 
# 
intval($HTTP_GET_VARS['start'])
Аватара пользователя
Vladson
Former team member
Сообщения: 816
Стаж: 19 лет 11 месяцев
Откуда: Estonia, Tallinn

Сообщение Vladson »

robbelkin писал(а):Все проблемы решаемы, эта тоже.
Эта не решаемая... (максимум что можно это поставить 8-ми процессорный сервак с 64Гб оперативы но это не очень дёшего)
Серый цвет - светлый (светлее чёрного), но он и тёмный (темнее белого), он же промежуточный (между чёрным и белым). Теорию относительности никто не отменял. Истина в целом - понятие виртуально-ситуативное.

Вернуться в «Бета-версии модов для phpBB 2.0.x»