Posts merging - Склейка сообщений для phpbb 3.0.xсклеивание сообщений - это размещение комментариев от одного пользователя, идущие друг за другом в течении определённого интервала времени.
тест работы мода проводился на версии
3.0.14Как выглядит процесс "склейки" - можно увидеть по скану:
Вложение:
scan_work.png [ 5.14 КБ | Просмотров: 23 ]
scan_work.png
Итак, поехали.
Сначала необходимо выполнить SQL-запрос:
Код: Выделить всё
INSERT INTO phpbb_config (config_name, config_value) VALUES('merge_interval', 0);
INSERT INTO phpbb_config (config_name, config_value) VALUES('merge_no_forums', 0);
INSERT INTO phpbb_config (config_name, config_value) VALUES('merge_no_topics', 0);
ALTER TABLE phpbb_posts ADD post_created INT(11) DEFAULT '0' NOT NULL AFTER post_time;
я создал на форуме hello-vitebsk установочный файл
db_update.php и провёл запрос с его помощью. если вам так тоже удобнее - скачать пак, распаковать, загрузить в корень сайта (где файл config.php) и сделать запрос по адресу
Вложение:
db_update.rar [1.32 КБ]
Скачиваний: 1
Установка через файл проходит успешно, проверка работоспособности форума после запроса не показала никаких ошибок:
Вложение:
sql.png [ 12.15 КБ | Просмотров: 23 ]
sql.png
Теперь необходимо загрузить файлы мода:
скачать из архива сайтараспаковать, содержимое папки
root загрузить в корень сайта (где файл config.php)
Теперь начинаем править файлы:
Открыть
viewtopic.phpНайти
Вставить после найденного
Найти
Код: Выделить всё
'POST_DATE' => $user->format_date($row['post_time'], false, ($view == 'print') ? true : false),Заменить найденное на
Код: Выделить всё
'POST_DATE' => (!$row['post_created']) ? $user->format_date($row['post_time'], false, ($view == 'print') ? true : false) : $user->format_date($row['post_created']),Открыть
posting.phpНайти
Код: Выделить всё
$message_md5 = md5($message_parser->message);Вставить после найденного
Код: Выделить всё
$addon_for_merge = $message_parser->message;Найти (показана часть строки)
Код: Выделить всё
$redirect_url = submit_post($mode, $post_data['post_subject'], $post_author_name, $post_data['topic_type'],Вставить перед найденным
Код: Выделить всё
include($phpbb_root_path . 'includes/posts_merging.' . $phpEx);Открыть
includes/acp/acp_board.phpНайти
Вставить после найденного
Найти
Код: Выделить всё
'flood_interval' => array('lang' => 'FLOOD_INTERVAL', 'validate' => 'int', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),Вставить после найденного
Код: Выделить всё
'merge_interval' => array('lang' => 'MERGE_INTERVAL', 'validate' => 'int', 'type' => 'text:3:4', 'explain' => true, 'append' => ' ' . $user->lang['HOURS']),
'merge_no_forums' => array('lang' => 'MERGE_NO_FORUMS', 'validate' => 'string', 'type' => 'text:5:255', 'explain' => true),
'merge_no_topics' => array('lang' => 'MERGE_NO_TOPICS', 'validate' => 'string', 'type' => 'text:5:255', 'explain' => true),Всё. закончили. Если всё прошло успешно - идём в админку и настраиваем наш мод:
Административный раздел -
Общие -
Размещение сообщений.
в поле
Интервал выставите значение времени, иначе мод не будет работать.
После этого проверяем работу мода.

изменение внешнего вывода надписи "сообщение добавлено..."
редактировать внешний вид можно в языковом файле.
language/ru/mods/posts_merging.phpстрока
Код: Выделить всё
'MERGE_SEPARATOR' => "\n\n[size=85][color=green]%s спустя %s:[/color][/size]\n", size=85 - размер шрифта
color=green - цвет шрифта

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

вывод возможности для пользователя "не склеивать"
Вложение:
posting_no.png [ 12.34 КБ | Просмотров: 23 ]
posting_no.png
Открыть
includes/post_merging.phpНайти
Код: Выделить всё
$merge = false;
$merge_interval = intval($config['merge_interval']) * 3600;
if (($current_time - $merge_post_data['topic_last_post_time']) < $merge_interval)
{
$merge = true;
}Вставить после найденного
Код: Выделить всё
$do_not_merge=request_var('do_not_merge',false);
if($do_not_merge) $merge=false; для стиля subsilver2:
Открыть
styles/ваш стиль/template/posting_body.htmlНайти
Код: Выделить всё
<!-- IF S_SIG_ALLOWED -->
<tr>
<td><input type="checkbox" class="radio" name="attach_sig"{S_SIGNATURE_CHECKED} /></td>
<td class="gen">{L_ATTACH_SIG}</td>
</tr>
<!-- ENDIF -->Вставить после найденного
Код: Выделить всё
<tr>
<td><input type="checkbox" class="radio" name="do_not_merge" /></td>
<td class="gen">{L_DO_NOT_MERGE}</td>
</tr> для стиля prosilver:
Открыть
styles/ваш стиль/template/posting_editor.htmlНайти
Код: Выделить всё
<div class="panel bg3" id="options-panel">
<div class="inner"><span class="corners-top"><span></span></span>
<fieldset class="fields1">Вставить после найденного
Код: Выделить всё
<div><label for="do_not_merge"><input type="checkbox" name="do_not_merge" id="do_not_merge"{S_DO_NOT_MERGE} /> {L_DO_NOT_MERGE}</label></div>Открыть
language/ru/common.php после (языковые правки)
Найти
Код: Выделить всё
'YOU_NO_NEW_PM' => 'У вас нет новых личных сообщений.',Вставить после найденного
Код: Выделить всё
'DO_NOT_MERGE' => 'Не склеивать с предыдущим',информация взята
здесь и
здесь.

"не склеивать" в быстром ответе
Открыть
viewtopic.phpНайти
Код: Выделить всё
// Output the posts
$first_unread = $post_unread = false;
for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)Вставить перед найденным
Код: Выделить всё
include($phpbb_root_path . 'includes/posts_merging.' . $phpEx);Открыть (для subsilver2)
quickreply_editor.htmlНайти (часть строки)
Вставить после найденного
Код: Выделить всё
<br /><input type="checkbox" class="radio" name="do_not_merge" /> {L_DO_NOT_MERGE}Открыть (для prosilver)
quickreply_editor.htmlНайти
Код: Выделить всё
<div style="width:99%;"><textarea style="height: 9em;" name="message" rows="7" cols="76" tabindex="3" class="inputbox"></textarea>Вставить после найденного
Код: Выделить всё
<br /><input type="checkbox" class="radio" name="do_not_merge" /> {L_DO_NOT_MERGE}