мод позволяет "закреплять" первое сообщение в теме на всех её страницах
(Переводить тему в режим "закрепления первого сообщения темы" может тот, кто имеет право её редактировать, то есть сам автор и админ (модераторы - если имеют такое право)).
Никаких файлов копировать на сервер не надо - только редактировать и сделать SQL-запрос для создания таблиц в базе данных.
Сделать SQL-запрос:
Код: Выделить всё
ALTER TABLE phpbb_topics ADD topic_first_post_show TINYINT(1) UNSIGNED DEFAULT '0' NOT NULL;
Для тех, кто "не сильно дружит" с запроса к базе, возможен иной вариант:
Скачать установщик:
Вложение:
распаковать и файл db_update.php закачать в корень сайта (где файл congig.php),
после этого запустить скрипт через браузер по адресу
Код: Выделить всё
http://ваш сайт/db_update.php
после отработки скрипта удалить его с сервера.
Теперь редактируем файлы форума:
Открыть posting.php
Найти
Вставить после найденного
Код: Выделить всё
$post_data['poll_options'] = array();
Вставить после найденного
Код: Выделить всё
$post_data['topic_first_post_show'] = (isset($post_data['topic_first_post_show'])) ? $post_data['topic_first_post_show'] : 0;
Найти
Вставить после найденного
Код: Выделить всё
$poll_delete = (isset($_POST['poll_delete'])) ? true : false;
Вставить после найденного
Код: Выделить всё
$topic_first_post_show = (isset($_POST['topic_first_post_show'])) ? true : false;
Найти
Вставить перед найденным
Код: Выделить всё
// Check the permissions for post approval. Moderators are not affected.
Вставить перед найденным
Код: Выделить всё
// Show/Unshow first post on every page
if(($mode == 'edit' && $post_id == $post_data['topic_first_post_id']) || $mode == 'post')
{
if($mode == 'post')
{
$topic_id = $data['topic_id'];
}
$perm_show_unshow = ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && !empty($post_data['topic_poster']) && $user->data['user_id'] == $post_data['topic_poster'])) ? true : false;
if($post_data['topic_first_post_show'] != $topic_first_post_show && $perm_show_unshow)
{
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_first_post_show = ' . (($topic_first_post_show) ? 1 : 0) . "
WHERE topic_id = $topic_id";
$db->sql_query($sql);
}
}
Найти
Вставить перед найденным
Код: Выделить всё
$s_topic_icons = false;
Вставить перед найденным
Код: Выделить всё
// Do show show first post on every page checkbox only in first post
$first_post_show_allowed = false;
if(($mode == 'edit' && $post_id == $post_data['topic_first_post_id']) || $mode == 'post')
{
$first_post_show_allowed = true;
}
Найти
Вставить после найденного
Код: Выделить всё
$lock_post_checked = (isset($post_lock)) ? $post_lock : $post_data['post_edit_locked'];
Вставить после найденного
Код: Выделить всё
$first_post_show_checked = (isset($post_data['topic_first_post_show'])) ? $post_data['topic_first_post_show'] : 0;
Найти
Вставить после найденного
Код: Выделить всё
'S_FORM_ENCTYPE' => $form_enctype,
Вставить после найденного
Код: Выделить всё
'S_FIRST_POST_SHOW_ALLOWED' => ($first_post_show_allowed && ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && !empty($post_data['topic_poster']) && $user->data['user_id'] == $post_data['topic_poster']))) ? true : false,
'S_FIRST_POST_SHOW_CHECKED' => ($first_post_show_checked) ? ' checked="checked"' : '',
Открыть viewtopic.php
Найти
Вставить после найденного
Код: Выделить всё
$i = ($store_reverse) ? $sql_limit - 1 : 0;
Вставить после найденного
Код: Выделить всё
// First post on every page
// Show first post on every page if needed
// For the case the user is trying to reach the first half of the topic
if ($topic_data['topic_first_post_show'] && ($start != 0))
{
if (!$store_reverse)
{
$post_list[$i] = (int) $topic_data['topic_first_post_id'];
}
$i++;
}
Найти
Вставить после найденного
Код: Выделить всё
($store_reverse) ? $i-- : $i++;
}
$db->sql_freeresult($result);
Вставить после найденного
Код: Выделить всё
// First post on every page
// Show first post on every page if needed
// For the case the user is trying to reach the second half of the topic
if ($topic_data['topic_first_post_show'] && ($start != 0) && $store_reverse)
{
$post_list[$i] = (int) $topic_data['topic_first_post_id'];
}
Завершение установки:
Почистите кэш и всё. Тема закрепляется путём установки "галочки" при создании темы в поле
Первое сообщение на каждой странице темы (под полем ввода).
Само собой, мод для "красивости" оформления можно и не ставить.
