Удаление дополнительных заголовков сообщений (Re: subj)

автор FladeX

Небольшие моды и хаки для форума phpBB3
Правила форума
При размещении мода/статьи взятой с другого форума/сайта обязательно необходимо указывать первоисточник сообщения.
 • Просмотры: 1494
Аватара пользователя
TFan
Откуда: Нижний Новгород
Благодарил (а): 123 раза
Поблагодарили: 54 раза
Сообщения: 201
Зарегистрирован: 05 май 2011, 23:43
Сообщение

Удаление дополнительных заголовков сообщений (Re: subj)

30 май 2011, 01:40

У каждого сообщения в phpBB есть свой заголовок, отображаемый перед текстом самого сообщения. Предполагалось, что форумчане смогут указывать тему сообщения в случаях, когда она отклоняется от изначальной темы топика, однако на деле в 98% случаев этот функционал не используется — и все пользователи в итоге видят лишь ненужные повторы заголовка темы с добавлением Re: перед ним. Поэтому опишу несколько способов, как избавиться от этого рудимента.

Удаление Re: из шаблона страниц просмотра темы



Для начала уберём дополнительный заголовок со страниц просмотра тем (так называемый viewtopic). Делается это элементарно — открываем шаблон styles/prosilver/template/viewtopic_body.html и находим там строчку:

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

			<h3 <!-- IF postrow.S_FIRST_ROW -->class="first"<!-- ENDIF -->><!-- IF postrow.POST_ICON_IMG --><img src="{T_ICONS_PATH}{postrow.POST_ICON_IMG}" width="{postrow.POST_ICON_IMG_WIDTH}" height="{postrow.POST_ICON_IMG_HEIGHT}" alt="" /> <!-- ENDIF --><a href="#p{postrow.POST_ID}">{postrow.POST_SUBJECT}</a></h3>
Упоминаемая здесь переменная {postrow.POST_SUBJECT} и есть тот самый заголовок сообщения. Можно убрать всю строчку, но лучше лишь эту часть:

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

<a href="#p{postrow.POST_ID}">{postrow.POST_SUBJECT}</a>
Тогда иконки сообщений сохранятся и будут отображаться, как и раньше.

Для шаблонов, основанных на subsilver2, надо искать строчку вида:

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

					<td class="gensmall" width="100%"><div style="float: {S_CONTENT_FLOW_BEGIN};"> <b>{L_POST_SUBJECT}:</b> {postrow.POST_SUBJECT}</div><div style="float: {S_CONTENT_FLOW_END};"><!-- IF S_IS_BOT -->{postrow.MINI_POST_IMG}<!-- ELSE --><a href="{postrow.U_MINI_POST}">{postrow.MINI_POST_IMG}</a><!-- ENDIF --><b>{L_POSTED}:</b> {postrow.POST_DATE} </div></td>
и удалять оттуда такой код:

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

<div style="float: {S_CONTENT_FLOW_BEGIN};"> <b>{L_POST_SUBJECT}:</b> {postrow.POST_SUBJECT}</div>
Разумеется, после произведённых действий не забудьте сохранить изменения в файлах, загрузить их на сервер и обновить в админке соответствующий шаблон.

Но описанный выше способ может показаться слишком уж радикальным, ибо он не будет показывать заголовки сообщений вообще никому. А иногда требуется сохранить отображение для некоторых групп пользователей, например, для администраторов и модераторов. Вспоминаем, что в phpBB есть шаблонные переменные, которые в данном случае подойдут как нельзя кстати.

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

Языковые переменные:

{SITENAME} - выводит название форума, прописанное в админке
{SITE_DESCRIPTION} - описание форума, прописанное в админке
{PAGE_TITLE} - выводит заголовок страницы
Пути:

{T_TEMPLATE_PATH} - заменяется на ./styles/ваш_стиль
{T_THEME_PATH} - заменяется на ./styles/ваш_стиль/theme
{T_STYLESHEET_LINK} - заменяется на ./style.php
{T_IMAGESET_PATH} - заменяется на ./styles/ваш_стиль/imageset
Условные конструкции:

<!-- IF not S_IS_BOT -->
 текст, который не увидят боты
 <!-- ENDIF --> 
<!-- IF S_USER_LOGGED_IN -->
 текст, который увидят только залогиненные пользователи
 <!-- ENDIF -->
Объединение условных конструкций:

<!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->
 текст, который не увидят боты, и увидят только залогиненные пользователи
 <!-- ENDIF -->
Алгоритм действий тот же самый, только вместо удаления части строки нужно вставлять до и после неё шаблонные условия. Условие для администраторов выглядит так:

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

<!-- IF U_ACP --><!-- ENDIF -->
Для модераторов:

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

<!-- IF U_MCP --><!-- ENDIF -->
Для тех и других одновременно (то есть будет показываться и администраторам, и модераторам):

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

<!-- IF U_ACP or U_MCP --><!-- ENDIF -->
Чтобы было совсем понятно, покажу, как надо оформить в условия нужную нам строчку:

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

<!-- IF U_ACP or U_MCP --><a href="#p{postrow.POST_ID}">{postrow.POST_SUBJECT}</a><!-- ENDIF -->
Удаление Re: из шаблона написания сообщений

Для полноты работы теперь удалим текстовое поле для ввода дополнительного заголовка, которое отображается в форме написания ответа в тему:



За этот шаблон отвечает файл posting_editor.htmlprosilver надо редактировать styles/prosilver/template/posting_editor.html, ища в нём строчки:

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

	<dl style="clear: left;">
		<dt><label for="subject">{L_SUBJECT}:</label></dt>
		<dd><input type="text" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" /></dd>
	</dl>
Однако удалить этот код нельзя, так как тогда пропадёт возможность указывать название для создаваемых тем, без чего ну никак не обойтись. Поэтому нужно условие, которое бы позволило определить, пишем мы новую темы или же просто сообщение в уже созданную тему. Можно специально добавить новое условие, а можно проверять просто наличие заголовка темы — если он есть, то понятно дело, что тема уже создана, а если его нет — значит, нет и темы. Поэтому используем такое условие:

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

<!-- IF not TOPIC_TITLE --><!-- ENDIF -->
В результате получим:

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

<!-- IF not TOPIC_TITLE -->
	<dl style="clear: left;">
		<dt><label for="subject">{L_SUBJECT}:</label></dt>
		<dd><input type="text" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" /></dd>
	</dl>
<!-- ENDIF -->
Аналогично и для subsilver2-стилей, только открывать надо уже файл styles/subsilver2/template/posting_body.html и искать такие строки:

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

<tr>
	<td class="row1" width="22%"><b class="genmed">{L_SUBJECT}:</b></td>
	<td class="row2" width="78%"><input class="post" style="width:450px" type="text" name="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}" /></td>
</tr>
Всё, после этого задача является выполненной.
Небольшая вариация

Отдельно рассмотрим случай, когда заголовок сообщения на странице просмотра темы надо выводить, а вот при редактировании сообщения - наоборот, не надо - но только пользователям, а администраторы и модераторы должны иметь возможность редактировать его. Тогда нужно редактировать лишь файл шаблона, отвечающего за постинг, так, чтобы пользователям не показывалось поле ввода, но при этом не удаляя его совсем. Для этого открываем всё тот же styles/prosilver/template/posting_editor.html, ища в нём строчки:

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

	<dl style="clear: left;">
		<dt><label for="subject">{L_SUBJECT}:</label></dt>
		<dd><input type="text" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" /></dd>
	</dl>
и заменяем на такой код:

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

<!-- IF U_ACP or U_MCP or not TOPIC_TITLE -->
	<dl style="clear: left;">
		<dt><label for="subject">{L_SUBJECT}:</label></dt>
		<dd><input type="text" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" /></dd>
	</dl>
<!-- ELSE -->
	<input type="hidden" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" />
<!-- ENDIF -->
Для subsilver2 надо открывать файл styles/subsilver2/template/posting_body.html и искать такие строки:

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

<tr>
	<td class="row1" width="22%"><b class="genmed">{L_SUBJECT}:</b></td>
	<td class="row2" width="78%"><input class="post" style="width:450px" type="text" name="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}" /></td>
</tr>
после чего заменять их на такие:

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

<!-- IF U_ACP or U_MCP or not TOPIC_TITLE -->
<tr>
	<td class="row1" width="22%"><b class="genmed">{L_SUBJECT}:</b></td>
	<td class="row2" width="78%"><input class="post" style="width:450px" type="text" name="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}" /></td>
</tr>
<!-- ELSE -->
	<input type="hidden" name="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" value="{SUBJECT}" />
<!-- ENDIF -->
Скопипастил здесь: http://fladex.ru/news/a-145.html
Последний раз редактировалось TFan 30 май 2011, 01:41, всего редактировалось 2 раза.
Адаптирую любой шаблон от phpBB3 под любую версию ppkBB3cker.
Аватара пользователя
mrm75
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Сообщения: 61
Зарегистрирован: 13 мар 2011, 05:37
Сообщение

Удаление дополнительных заголовков сообщений (Re: subj)

30 май 2011, 07:51

Спасибо, как раз то что нужно!
Аватара пользователя
mrm75
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Сообщения: 61
Зарегистрирован: 13 мар 2011, 05:37
Сообщение

Удаление дополнительных заголовков сообщений (Re: subj)

06 июн 2011, 22:07

А вот как убрать это поле с формы быстрого ответа?
Ty
TyMaH
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Сообщения: 26
Зарегистрирован: 25 авг 2011, 17:06
Сообщение

Удаление дополнительных заголовков сообщений (Re: subj)

22 сен 2011, 20:18

Есть метод в 20 раз проще

Открыть: posting.php


Найти:

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

if (($mode == 'reply' || $mode == 'quote') && !$submit && !$preview && !$refresh)
{
    $post_data['post_subject'] = ((strpos($post_data['post_subject'], 'Re: ') !== 0) ? 'Re: ' : '') . censor_text($post_data['post_subject']);
} 
Заменить на:

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

if (($mode == 'reply' || $mode == 'quote') && !$submit && !$preview && !$refresh)
{
    $post_data['post_subject'] = ((strpos($post_data['post_subject'], 'Re: ') !== 0) ? '' : '') . censor_text($post_data['post_subject']);
}
Аватара пользователя
9CaraTT
Благодарил (а): 230 раз
Поблагодарили: 228 раз
Сообщения: 3085
Зарегистрирован: 13 мар 2011, 15:23
Сообщение

Удаление дополнительных заголовков сообщений (Re: subj)

05 фев 2013, 20:09

TyMaH писал(а):Есть метод в 20 раз проще
PPK а почему на моде трекера не поставил к примеру мод NV advanced last topic titles там уже нет этих Re: по умолчанию ... на 3.0.11 версии форума проблем не знаю по удалению Re: )
Ma
MagmaMan
Сообщения: 5
Зарегистрирован: 11 июл 2013, 11:04
Сообщение

Удаление дополнительных заголовков сообщений (Re: subj)

11 июл 2013, 16:35

TyMaH писал(а):Есть метод в 20 раз проще

Открыть: posting.php
Я попробовал, у меня не сработало. :?:
TFan писал(а):Но описанный выше способ может показаться слишком уж радикальным, ибо он не будет показывать заголовки сообщений вообще никому. А иногда требуется сохранить отображение для некоторых групп пользователей, например, для администраторов и модераторов.
Не пойму, а в чем заключается радикальность? Можно показать на примерах?

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