info navigation

phpbb-belk.ru

темы, связанные с форумом phpbb 3.0.x



Новая тема  [ 1 сообщение ]  Просмотры: 1794

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

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


Стиль: subsilver2


Репутация: 11


Russia

Тиц и PR

перейти на сайт пользователя
Найти темы пользователя


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 КБ]
Скачиваний: 36


распаковать и файл 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).


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

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

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



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

Кто сейчас на сайте:

Всего посетителей: 4, из них зарегистрированных: 0, скрытых: 0 и гостей: 4 (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (122) здесь было 19 дек 2023, 12:10

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



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

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




cron

Текущее время: 19 мар 2025, 18:30

Создано на основе phpBB® Forum Software © phpBB Group
Яндекс.Метрика

Полная версия Мобильный вид