Мод сворачивания категорий для форума phpBB3

Expand categories

Небольшие моды и хаки для форума phpBB3
Правила форума
При размещении мода/статьи взятой с другого форума/сайта обязательно необходимо указывать первоисточник сообщения.
 • Просмотры: 4813
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Мод сворачивания категорий для форума phpBB3

10 ноя 2011, 12:15

Существует мод под названием Expand categories (https://www.phpbb.com/customise/db/mod/ ... ategories/) для форума phpBB3 который позволяет сворачивать категории форума, с возможностью сохранения состояния в куках пользователя, а так-же в опции каждой из категорий указывать начальное состояние категории (свёрнута/развёрнута), текущая версия мода 1.4.1, под phpBB версии 3.0.5 и только для стиля prosilver, доработанный вариант этого мода под последнюю версию phpBB3 (3.0.9) + инструкция для стиля subsliver2:

В phpmyadmin выполнить

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

ALTER TABLE phpbb_forums ADD default_display tinyint(1) NOT NULL DEFAULT 1;
adm/style/acp_forums.html после

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

				<label><input type="radio" class="radio" name="display_active" value="0"<!-- IF not S_ENABLE_ACTIVE_TOPICS --> id="display_active" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
		</dl>
добавить

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

		<dl>
			<dt><label for="forum_style">{L_DEFAULT_DISPLAY}:</label><br /><span>{L_DEFAULT_DISPLAY_EXPLAIN}</span></dt>
			<dd><label><input type="radio" class="radio" name="default_display" value="1"<!-- IF S_DEFAULT_DISPLAY --> id="default_display" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
				<label><input type="radio" class="radio" name="default_display" value="0"<!-- IF not S_DEFAULT_DISPLAY --> id="default_display" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
		</dl>
includes/acp/acp_forums.php после

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

						'forum_password_confirm'=> request_var('forum_password_confirm', '', true),
						'forum_password_unset'	=> request_var('forum_password_unset', false),
добавить

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

						'default_display'		=> request_var('default_display', true),
после

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

							'forum_password'		=> '',
							'forum_password_confirm'=> '',
добавить

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

							'default_display'		=> true,
после

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

					'S_ENABLE_QUICK_REPLY'		=> ($forum_data['forum_flags'] & FORUM_FLAG_QUICK_REPLY) ? true : false,
					'S_CAN_COPY_PERMISSIONS'	=> ($action != 'edit' || empty($forum_id) || ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))) ? true : false,
добавить

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

					'S_DEFAULT_DISPLAY'			=> ($forum_data['default_display']) ? true : false,
includes/functions_display.php после

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

		// Empty category
		if ($row['parent_id'] == $root_data['forum_id'] && $row['forum_type'] == FORUM_CAT)
		{
добавить

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

			$cat_aff_stat = request_var($config['cookie_name'].'_cat_'.$row['forum_id'].'_aff_stat', intval($row['default_display']),false,true);
после

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

			$template->assign_block_vars('forumrow', array(
				'S_IS_CAT'				=> true,
добавить

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

				'DISPLAY_CAT'			=> ($cat_aff_stat) ? '' : 'none',
				'DISPLAY_CAT_LINK'		=> ($cat_aff_stat) ? '<a href="javascriptshow_details(\'cat_'.$row['forum_id'].'\');" title="'.$user->lang['EXPAND_CAT_HIDE'].'">-</a>' : '<a href="javascriptshow_details(\'cat_'.$row['forum_id'].'\');" title="'.$user->lang['EXPAND_CAT_DISPLAY'].'">+</a>',
index.php после

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

// Assign index specific vars
$template->assign_vars(array(
добавить

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

	'COOKIE_NAME'		=> $config['cookie_name'],
language/ru/acp/forums.php перед
добавить

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

	'DEFAULT_DISPLAY'			=> 'Показывать форумы развёрнутыми',
	'DEFAULT_DISPLAY_EXPLAIN'	=> 'Настройки показа/скрытия форумов',
language/ru/common.php перед
добавить

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

$lang = array_merge($lang, array(
	'EXPAND_CAT_DISPLAY'	=> 'Показать форумы',
	'EXPAND_CAT_HIDE'		=> 'Скрыть форумы',
));
styles/prosilver/template/forumlist_body.html перед

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

<!-- BEGIN forumrow -->
	<!-- IF (forumrow.S_IS_CAT and not forumrow.S_FIRST_ROW) or forumrow.S_NO_CAT  -->
добавить

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

<script type="text/javascript">
function show_details(id)
{
	if(document.getElementById(id).style.display == 'none')
	{
		//Display
		document.getElementById(id).style.display = 'block';
		//Change link
		document.getElementById('phpbb_'+id).innerHTML = '<a href="javascriptshow_details(\''+id+'\');" title="{L_EXPAND_CAT_HIDE}">-</a>';
		//Delete cookie
		createCookie('{COOKIE_NAME}_'+id+'_aff_stat', 1, 365);
	}
	else
	{
		//Don't display
		document.getElementById(id).style.display = 'none';
		//Change link
		document.getElementById('phpbb_'+id).innerHTML = '<a href="javascriptshow_details(\''+id+'\');" title="{L_EXPAND_CAT_DISPLAY}">+</a>';
		//Create cookie
		createCookie('{COOKIE_NAME}_'+id+'_aff_stat', 0, 365);
	}
}
</script>
после

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

<!-- BEGIN forumrow -->
	<!-- IF (forumrow.S_IS_CAT and not forumrow.S_FIRST_ROW) or forumrow.S_NO_CAT  -->
			</ul>
добавить

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

			</div>
заменить

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

						<dt><!-- IF forumrow.S_IS_CAT --><a href="{forumrow.U_VIEWFORUM}">{forumrow.FORUM_NAME}</a><!-- ELSE -->{L_FORUM}<!-- ENDIF --></dt>
на

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

						<dt><!-- IF forumrow.S_IS_CAT --><span id="phpbb_cat_{forumrow.FORUM_ID}" style="font-size:18px;margin-right:8px;">{forumrow.DISPLAY_CAT_LINK}</span><a href="{forumrow.U_VIEWFORUM}">{forumrow.FORUM_NAME}</a><!-- ELSE -->{L_FORUM}<!-- ENDIF --></dt>
перед

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

			<ul class="topiclist forums">
	<!-- ENDIF -->
добавить

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

				<div id="cat_{forumrow.FORUM_ID}" style="display:{forumrow.DISPLAY_CAT};">
после

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

	<!-- IF forumrow.S_LAST_ROW -->
			</ul>
добавить
styles/subsilver2/template/forumlist_body.html перед

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

<table class="tablebg" cellspacing="1" width="100%">
добавить

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

<script type="text/javascript">
function show_details(id)
{
	if(document.getElementById(id).style.display == 'none')
	{
		//Display
		document.getElementById(id).style.display = '';
		//Change link
		document.getElementById('phpbb_'+id).innerHTML = '<a class="wo_title" href="javascriptshow_details(\''+id+'\');" title="{L_EXPAND_CAT_HIDE}">-</a>';
		//Delete cookie
		document.cookie = '{COOKIE_NAME}_'+id+'_aff_stat=1;';
	}
	else
	{
		//Don't display
		document.getElementById(id).style.display = 'none';
		//Change link
		document.getElementById('phpbb_'+id).innerHTML = '<a class="wo_title" href="javascriptshow_details(\''+id+'\');" title="{L_EXPAND_CAT_DISPLAY}">+</a>';
		//Create cookie
		document.cookie = '{COOKIE_NAME}_'+id+'_aff_stat=0;';
	}
}
</script>


<!-- BEGIN forumrow -->

	<!-- IF (forumrow.S_IS_CAT and not forumrow.S_FIRST_ROW) or forumrow.S_NO_CAT  -->
		</tbody>

</table>
	<!-- ENDIF -->

	<!-- IF forumrow.S_IS_CAT or forumrow.S_FIRST_ROW  or forumrow.S_NO_CAT  -->
после

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

<table class="tablebg" cellspacing="1" width="100%">
добавить

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

<!-- IF forumrow.S_FIRST_ROW -->
перед

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

<tr>
	<th colspan="2">&nbsp;{L_FORUM}&nbsp;</th>
добавить

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

	<!-- ENDIF -->
удалить

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

<!-- BEGIN forumrow -->
	<!-- IF forumrow.S_IS_CAT -->
заменить

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

			<td class="cat" colspan="2"><h4><a href="{forumrow.U_VIEWFORUM}">{forumrow.FORUM_NAME}</a></h4></td>
на

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

				<td class="cat" colspan="2"><h4><span id="phpbb_cat_{forumrow.FORUM_ID}" style="font-size:18px;margin-right:8px;">{forumrow.DISPLAY_CAT_LINK}</span><a href="{forumrow.U_VIEWFORUM}">{forumrow.FORUM_NAME}</a></h4></td>
заменить

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

	<!-- ELSEIF forumrow.S_IS_LINK -->
		<tr>
			<td class="row1" width="50" align="center">{forumrow.FORUM_FOLDER_IMG}</td>
			<td class="row1">
				<!-- IF forumrow.FORUM_IMAGE -->
					<div style="float: {S_CONTENT_FLOW_BEGIN}; margin-{S_CONTENT_FLOW_END}: 5px;">{forumrow.FORUM_IMAGE}</div>
на

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

	<tbody id="cat_{forumrow.FORUM_ID}" style="display:{forumrow.DISPLAY_CAT};">
заменить

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

				<a class="forumlink" href="{forumrow.U_VIEWFORUM}">{forumrow.FORUM_NAME}</a>
				<p class="forumdesc">{forumrow.FORUM_DESC}</p>
			</td>
			<!-- IF forumrow.CLICKS -->
				<td class="row2" colspan="3" align="center"><span class="genmed">{L_REDIRECTS}: {forumrow.CLICKS}</span></td>
			<!-- ELSE -->
				<td class="row2" colspan="3" align="center">&nbsp;</td>
			<!-- ENDIF -->
		</tr>
	<!-- ELSE -->
		<!-- IF forumrow.S_NO_CAT -->
			<tr>
				<td class="cat" colspan="2"><h4>{L_FORUM}</h4></td>
				<td class="catdiv" colspan="3">&nbsp;</td>
			</tr>
		<!-- ENDIF -->
на

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

	<!-- IF not forumrow.S_IS_CAT -->
перед

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

<!-- BEGINELSE -->
	<tr>
добавить

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

	<!-- IF forumrow.S_LAST_ROW -->
		</tbody>
	<!-- ENDIF -->
Очистить кеш, обновить переделанные стили.

Результат, скриншоты, опция в адм. разделе:


Свёрнутые/развёрнутые категории форумов:




Аватара пользователя
9CaraTT
Благодарил (а): 230 раз
Поблагодарили: 228 раз
Сообщения: 3085
Зарегистрирован: 13 мар 2011, 15:23
Сообщение

Мод сворачивания категорий для форума phpBB3

10 ноя 2011, 16:07

Класс, я мод сам использовать не буду, но выдерну мануальчик как разделить категории = D
Аватара пользователя
i926
Откуда: Санкт-Петербург
Благодарил (а): 38 раз
Поблагодарили: 67 раз
Сообщения: 446
Зарегистрирован: 21 сен 2010, 18:55
Сообщение

Мод сворачивания категорий для форума phpBB3

19 янв 2012, 19:24

Попробовал под 44 версию (prosilver - подобный стиль). Сворачивание категорий работает хорошо, :) но....... Две ошибки выдаёт :(
В "Списке форумов" выдаёт ошибку и жалуется на 338 строку в /includes/functions_display.php

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

[phpBB Debug] PHP Notice: in file /includes/functions_display.php on line 338: Undefined index: default_display

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

$cat_aff_stat = request_var($config['cookie_name'].'_cat_'.$row['forum_id'].'_aff_stat', intval($row['default_display']),false,true);
Редактирование форумов выдаёт эту ошибку, со ссылкой на 713 строку в /includes/acp/acp_forums.php

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

[phpBB Debug] PHP Notice: in file /includes/acp/acp_forums.php on line 713: Undefined index: default_display

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

'S_DEFAULT_DISPLAY'         => ($forum_data['default_display']) ? true : false,
Стало быть поклоны Многомудрому РРК.... Имеются ли изменения в коде под 44 обнову для этого творения ?
Настройка серверной части трекера - ppkbb3cker
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Мод сворачивания категорий для форума phpBB3

23 янв 2012, 11:16

нет, должно работать.
Аватара пользователя
i926
Откуда: Санкт-Петербург
Благодарил (а): 38 раз
Поблагодарили: 67 раз
Сообщения: 446
Зарегистрирован: 21 сен 2010, 18:55
Сообщение

Мод сворачивания категорий для форума phpBB3

24 янв 2012, 11:15

Таки работает, но включенный Дебаг выдаёт нотисы, а они висят и не особо глаз радуют. :(
Пока мод только на тестовом, а хотелось бы на основной натянуть.....
Настройка серверной части трекера - ppkbb3cker
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Мод сворачивания категорий для форума phpBB3

24 янв 2012, 11:17

я имею ввиду должен "работать без ошибок", дебаг у меня всегда включён, можно прислать изменённые файлы - проверю.
Аватара пользователя
i926
Откуда: Санкт-Петербург
Благодарил (а): 38 раз
Поблагодарили: 67 раз
Сообщения: 446
Зарегистрирован: 21 сен 2010, 18:55
Сообщение

Мод сворачивания категорий для форума phpBB3

24 янв 2012, 22:17

Окейно, выслал
Настройка серверной части трекера - ppkbb3cker
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Мод сворачивания категорий для форума phpBB3

25 янв 2012, 10:42

/language/ru/acp/forums.php нет кода

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

	'DEFAULT_DISPLAY'			=> 'Показывать форумы развёрнутыми',
	'DEFAULT_DISPLAY_EXPLAIN'	=> 'Настройки показа/скрытия форумов',
это выполнялось?

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

ALTER TABLE phpbb_forums ADD default_display tinyint(1) NOT NULL DEFAULT 1;
если префикс у таблиц не phpbb_ - заменить на свой.
Аватара пользователя
i926
Откуда: Санкт-Петербург
Благодарил (а): 38 раз
Поблагодарили: 67 раз
Сообщения: 446
Зарегистрирован: 21 сен 2010, 18:55
Сообщение

Мод сворачивания категорий для форума phpBB3

26 янв 2012, 00:11

Увы.... Всё как всегда..... Сам ошибся, невнимательность..... :(
На Тестовом, куча сайтов на прогоне, вот Перфикс и недосмотрел...... А ведь всё рядом было

Спасибо РРК, всё в норме стало
Настройка серверной части трекера - ppkbb3cker
fa
fail
Благодарил (а): 49 раз
Сообщения: 94
Зарегистрирован: 22 фев 2011, 22:11
Сообщение

Мод сворачивания категорий для форума phpBB3

30 июл 2012, 02:43

будем пробовать ставить :D

Вернуться в «Минимоды и хаки для phpBB3»