сайт на данный момент является архивом информации по форуму phpbb 3.0. объяснения и помощь больше не предоставляются. старый сайт

Белк на PhpBB 3.0.14

информация по этому форуму. bbcode, моды и прочее, проверенное Белком. (перенос данных продолжается...)

Сегодня на конференции было 52 посетителей :: 1 зарегистрированный, 0 скрытых, 1 бот и 50 гостей (основано на активности посетителей за последние 24 часа)




 [ 1 сообщение ] 
Автор Сообщение
Не в сети
  (Андрей)
Администратор
Аватара пользователя

Стаж: 5 месяцев 20 дней
Сообщения: 228
Откуда: здешние мы

Стиль сайта: subsilver2
Настоящее имя: Андрей


First post on every page

мод позволяет "закреплять" первое сообщение в теме на всех её страницах.

(Переводить тему в режим "закрепления первого сообщения темы" может тот, кто имеет право её редактировать, то есть сам автор и админ (модераторы - если имеют такое право)).

Никаких файлов копировать на сервер не надо - только редактировать и сделать SQL-запрос для создания таблиц в базе данных.

Сделать SQL-запрос:

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

ALTER TABLE phpbb_topics ADD topic_first_post_show TINYINT(1) UNSIGNED DEFAULT '0' NOT NULL;


Для тех, кто "не сильно дружит" с запросами к базе, возможен иной вариант:

Скачать установщик:

Вложение:
db_update.rar [1.26 КБ]
Скачиваний: 1


распаковать и файл 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'];
}


EN языковые правки
Открыть language/en/common.php
Найти

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

   'FIND_USERNAME'         => 'Find a member',


Вставить после найденного

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

   'FIRST_POST_SHOW'      => 'Show on top of every page',


RU языковые правки
Открыть language/ru/common.php
Найти

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

'FIND_USERNAME'         => 'Find a member',


Вставить перед найденным

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

'FIRST_POST_SHOW'      => 'Первое сообщение на каждой странице темы',


для стилей на основе prosilver
Открыть styles/prosilver/template/posting_editor.html
Найти

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

         <!-- IF S_LOCK_POST_ALLOWED -->
            <div><label for="lock_post"><input type="checkbox" name="lock_post" id="lock_post"{S_LOCK_POST_CHECKED} /> {L_LOCK_POST} [{L_LOCK_POST_EXPLAIN}]</label></div>
         <!-- ENDIF -->


Вставить после найденного

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

         <!-- IF S_FIRST_POST_SHOW_ALLOWED -->
            <div><label for="topic_first_post_show"><input type="checkbox" name="topic_first_post_show" id="topic_first_post_show"{S_FIRST_POST_SHOW_CHECKED} /> {L_FIRST_POST_SHOW} </label></div>
         <!-- ENDIF -->


для стилей на основе subsilver2
Открыть styles/subsilver2/template/posting_body.html
Найти

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

<!-- IF S_LOCK_POST_ALLOWED -->
            <tr>
               <td><input type="checkbox" class="radio" name="lock_post"{S_LOCK_POST_CHECKED} /></td>
               <td class="gen">{L_LOCK_POST} [{L_LOCK_POST_EXPLAIN}]</td>
            </tr>
         <!-- ENDIF -->


Вставить после найденного

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

<!-- IF S_FIRST_POST_SHOW_ALLOWED -->
            <tr>
               <td><input type="checkbox" class="radio" name="topic_first_post_show"{S_FIRST_POST_SHOW_CHECKED} /></td>
               <td class="gen">{L_FIRST_POST_SHOW}</td>
            </tr>
         <!-- ENDIF -->


небольшой мод для изменения внешнего вида закреплённого сообщения
Открыть viewtopic.php
Найти

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

'U_TOPIC'            => "{$server_path}viewtopic.$phpEx?f=$forum_id&amp;t=$topic_id",


Вставить после найденного

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

'S_TOPIC_FIRST_POST_SHOW'   => ($topic_data['topic_first_post_show'] == 1) ? true : false,


для стилей на основе prosilver:

Открыть styles/prosilver/template/viewtopic_body.html
Найти (может быть приведена только часть строки)

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

<div id="p{postrow.POST_ID}" class="post


Часть строки

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

<!-- IF postrow.S_ROW_COUNT is odd -->


Заменить часть строки на

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

<!-- IF S_TOPIC_FIRST_POST_SHOW and postrow.S_ROW_COUNT eq 0 -->bg3<!-- ELSEIF postrow.S_ROW_COUNT is odd -->


Найти

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

<hr class="divider" />


Вставить после найденного

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

<!-- IF S_TOPIC_FIRST_POST_SHOW and postrow.S_ROW_COUNT eq 0 --><br /><br /><!-- ENDIF -->


для стилей на основе subsilver2:

Открыть styles/subsilver2/template/viewtopic_body.html
Найти

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

<!-- IF postrow.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->


Заменить найденное на

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

<!-- IF S_TOPIC_FIRST_POST_SHOW and postrow.S_ROW_COUNT eq 0 --><tr class="row3"><!-- ELSEIF postrow.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->


Найти

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

<!-- IF postrow.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->


Заменить найденное на

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

<!-- IF S_TOPIC_FIRST_POST_SHOW and postrow.S_ROW_COUNT eq 0 --><tr class="row3"><!-- ELSEIF postrow.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->


Найти

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

<!-- IF postrow.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->


Заменить найденное на

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

<!-- IF S_TOPIC_FIRST_POST_SHOW and postrow.S_ROW_COUNT eq 0 --><tr class="row3"><!-- ELSEIF postrow.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->


Найти

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

<!-- END postrow -->


Вставить перед найденным

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

<!-- IF S_TOPIC_FIRST_POST_SHOW and postrow.S_ROW_COUNT eq 0 --><br /><br /><!-- ENDIF -->


За оформление "закреплённого блока" будут отвечать классы
для prosilver: bg3
для subsilver: row3

Если у вас такие уже используются - поставьте другие и пропишите в стилевом файле (css).


Завершение установки:

Почистите кэш и всё. Тема закрепляется путём установки "галочки" при создании темы в поле
Первое сообщение на каждой странице темы (под полем ввода).

Само собой, мод для "красивости" оформления можно и не ставить. :)



трёхголовый белк семейства рептилоидов:
"три головы - хорошо, на как же трудно придти к согласию..."
Показать сообщения за:  Поле сортировки  
Ответить на тему  [ 1 сообщение ] 

Кто сейчас на конференции:

Всего посетителей: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1 (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (63) здесь было 23 май 2026, 12:35

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Часовой пояс: UTC + 3 часа



Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

cron

Текущее время: 26 июн 2026, 20:51

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB.