Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

MOD Moderators_optimization. Долой sql в списке модераторов!

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 3 месяца
Откуда: Орёл

MOD Moderators_optimization. Долой sql в списке модераторов!

Сообщение Профессор »

##############################################################
## MOD Title: Moderators_optimization
## MOD Author: Профессор (Е.Подопригора, г.Орёл) http://www.dozor.org
## MOD Description: Мод позволяет избавиться от выполнения sql
## запросов при составлении списка модераторов
## на главной странице форума (index.php )и при выполнии viewforum.php
## MOD Version: 1.0 28 августа 2005г.
##
## Files To Edit: 4
## index.php
## templates/subSilver/index_body.tpl
## viewforum.php
## templates/subSilver/viewforum_body.tpl
##
## Files To Copy: 1
## admin/admin_moder_optimiz.php
##
##############################################################
#
#-----[ Выполнить ]---------------------------------------
#

Создать поле forum_moderators в таблице forums
Для этого запустите скопируйте в корневой каталог форума файл
create_moder_pole.php и выполните его,
либо выполните команду через sql админ

ALTER TABLE phpbb_forums
ADD forum_moderators text;

#
#-----[ Открыть и добавить в lang_admin.php ]-----------------------
#

$lang['Moderator_Optimiz'] = 'Синхронизировать список модераторов';

#
#-----[ Скопировать и выполнить ]--------------------------------
#
Скопируйте admin_moder_optimiz.php в admin/admin_moder_optimiz.php

Затем через админ панель выполните пункт "Синхронизировать список модераторов"

#
#-----[ Открыть ]---------------------------------------
#

index.php

#
#-----[ Найти ]------------------------------------------
#

// Obtain list of moderators of each forum

#
#-----[ Удалить всё до этих строк включительно ]-------------
#
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=" . $row['group_id']) . '">' . $row['group_name'] . '</a>';
}
$db->sql_freeresult($result);

#
#-----[ Найти и удалить ]--------------------------------------
#
if ( count($forum_moderators[$forum_id]) > 0 )
{
$l_moderators = ( count($forum_moderators[$forum_id]) == 1 ) ? $lang['Moderator'] : $lang['Moderators'];
$moderator_list = implode(', ', $forum_moderators[$forum_id]);
}
else
{
$l_moderators = '&nbsp;';
$moderator_list = '&nbsp;';
}


#
#-----[ Найти ]--------------------------------------
#
'MODERATORS' => $moderator_list,

#
#-----[ Заменить на ]--------------------------------------
#

'MODERATORS' => $forum_data[$j]['forum_moderators'],

#
#-----[ Найти и удалить ]-----------------------------------
#
'L_MODERATOR' => $l_moderators,

#
#-----[ Открыть ]---------------------------------------
#

templates/subSilver/index_body.tpl

#
#-----[ Найти и удалить ]-----------------------------------
#

{catrow.forumrow.L_MODERATOR}

#
#-----[ Открыть ]---------------------------------------
#

viewforum.php

#
#-----[ Найти ]-------------------------------------
#

// Obtain list of moderators of each forum

#
#-----[ Найти ]------------------------------------------
#

unset($moderators);

#
#-----[ Удалить ]------------------------------------------
#

Удалить всё, что стоит между этими строками

#
#-----[ Удалить строку]------------------------------------
#

'L_MODERATOR' => $l_moderators,

#
#-----[ Найти ]------------------------------------------
#

'MODERATORS' => $forum_moderators,
#
#-----[ Заменить на ]---------------------------------------
#

'MODERATORS' => $forum_row['forum_moderators'],

#
#-----[ Открыть ]---------------------------------------
#

viewforum_body.tpl

#
#-----[ Найти ]------------------------------------------
#

{L_MODERATOR}: {MODERATORS}

#
#-----[ Заменить на ]---------------------------------------
#

{MODERATORS}

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM

Файл create_moder_pole.php
<?php
// create_moder_pole.php
// создаем поле в базе данных для описания списка модераторов
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'common.php');
include($phpbb_root_path . 'includes/functions_selects.'.$phpEx);
$sql = '
ALTER TABLE phpbb_forums
ADD forum_moderators text;
';

if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not query announcements information', '', __LINE__, __FILE__, $sql);
}
echo('Complette');
?>
Файл admin_moder_optimiz.php
<?php
/******************************************************************
* admin_moder_optimiz.php
* -------------------------------
* begin : 28/08/2005
* copyright : Профессор (Е.Подопригора, ш.Орёл)
* www : http://dozor.org
*
* version : 1.0.0 - 26/08/2005
*
*
*********************************************************************/
define('IN_PHPBB', 1);
if( !empty($setmodules) ) {
$file = basename(__FILE__);
$module['Forums']['Moderator_Optimiz'] = $file;
return;
}
// Load default header
$phpbb_root_path = "./../";
require($phpbb_root_path . 'extension.inc');
require('./pagestart.' . $phpEx);

$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id, t.topic_title, t.topic_id, topic_replies
FROM ((( " . FORUMS_TABLE . " f
LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
LEFT JOIN " . TOPICS_TABLE . " t ON t.topic_id = p.topic_id )
ORDER BY f.cat_id, f.forum_order";
if ( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
while( $row = $db->sql_fetchrow($result) ) {
$forum_data[] = $row;
}
if ( !($total_forums = count($forum_data)) ) {
message_die(GENERAL_MESSAGE, 'На этом сайте нет форумов');
}
// Составление списка модераторов
$sql = "SELECT aa.forum_id, u.user_id, u.username
FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
WHERE aa.auth_mod = " . TRUE . "
AND g.group_single_user = 1
AND ug.group_id = aa.group_id
AND g.group_id = aa.group_id
AND u.user_id = ug.user_id
GROUP BY u.user_id, u.username, aa.forum_id
ORDER BY aa.forum_id, u.user_id";
if ( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
}
$forum_moderators = array();
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '">' . $row['username'] . '</a>';
}
$db->sql_freeresult($result);

$sql = "SELECT aa.forum_id, g.group_id, g.group_name
FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
WHERE aa.auth_mod = " . TRUE . "
AND g.group_single_user = 0
AND g.group_type <> " . GROUP_HIDDEN . "
AND ug.group_id = aa.group_id
AND g.group_id = aa.group_id
GROUP BY g.group_id, g.group_name, aa.forum_id
ORDER BY aa.forum_id, g.group_id";
if ( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
}
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=" . $row['group_id']) . '">' . $row['group_name'] . '</a>';
}
$db->sql_freeresult($result);
// Конец составления списка модераторов

$sql = "SELECT f.forum_id
FROM " . FORUMS_TABLE . " f
ORDER BY f.cat_id, f.forum_order";

if( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
$forum_data = $db->sql_fetchrowset($result);

for ($i = 0; $i < count($forum_data); $i++)
{
$vspom_forum_id = $forum_data[$i][forum_id];
if ( count($forum_moderators[$vspom_forum_id]) > 0 ) {
$l_moderators = ( count($forum_moderators[$vspom_forum_id]) == 1 ) ? '<br>Модератор - ' : '<br>Модераторы: ';
$moderator_list = implode(', ', $forum_moderators[$vspom_forum_id]);
}
else {
$l_moderators = '';
$moderator_list = '';
}
$moderators_in_forum = $l_moderators . $moderator_list;
$sql = "UPDATE " . FORUMS_TABLE . "
SET forum_moderators = '" . $moderators_in_forum . "'
WHERE forum_id = $vspom_forum_id";
if( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
}

$sql = "SELECT f.*
FROM " . FORUMS_TABLE . " f
ORDER BY f.cat_id, f.forum_order";

if( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
$forum_data = $db->sql_fetchrowset($result);

echo '<b>Список модераторов синхронизирован для вывода на главной странице</b><br><br>';
echo '<table width="100%" cellpadding="2" cellspacing="1" border="1" class="forumline">';

for ($i = 0; $i < count($forum_data); $i++)
{
echo '<tr><td class="row1" align="left" valign="top">';
echo $forum_data[$i][forum_name] . '<br>';
echo $forum_data[$i]['forum_desc'] . '<br>';
echo $forum_data[$i]['forum_moderators'];
echo '<br></td></tr>';
}
echo '</table>';
include('./page_footer_admin.'.$phpEx);
?>
Jovani
phpBB 2.0.5
Сообщения: 477
Стаж: 19 лет 11 месяцев

Сообщение Jovani »

Я уже давно, вообще проще проще сделал - убрал SQL-запросы модераторов, а ники модераторов ручками вписал в поле "описание форума".
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 3 месяца
Откуда: Орёл

Сообщение Профессор »

Jovani, просто на одном из форумов, для которого я обеспечиваю ПО, модераторы периодически меняются и их много. Естественно, администратору там было бы няпряжно всякий раз переписывать модераторов вручную.

Думаю, что это мод именно для форумов с кучей модераторов и их постоянной текучкой и перетасовкой.

Xpert, а нельзя ли перенести мой мод в раздел "Анонсы и поддержка".
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Применение append_sid катгорически запрещено в данном случае - ссылка должна поскольку sid будет неверным для любого участника. Либо убирать ссылки вообще, либо работатать в направлении более полного запоминания данных.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Лучше группу Модераторы сделать и в неё добавлять модеров или вообще убрать: Отключение списка модераторов на главной странице

Добавлено спустя 2 минуты 2 секунды:
Профессор писал(а):а нельзя ли перенести мой мод в раздел "Анонсы и поддержка".
Вообще моды сначала постятся в раздел Бета-Версии, а спустя некоторое время после тестирования и обсуждения перекочевывают в Анонсы и поддержку

Добавлено спустя 1 минуту 45 секунд:

До кучи: неплохо было бы юзать тег code, это намного удобнее. И воспользоваться шаблоном мода, что тоже крайне желательно
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 3 месяца
Откуда: Орёл

Сообщение Профессор »

Xpert писал(а):Применение append_sid катгорически запрещено в данном случае - ссылка должна поскольку sid будет неверным для любого участника
Странно, я попробовал. Всё нормально. Профили выводятся корректно, но я переделаю без append_sid
Coagulant писал(а): или вообще убрать: Отключение списка модераторов на главной странице
А в моем случае они были нужны. Много подфорумов и у каждого по несколько модераторов. И нужно было, чтобы они непременно были видны на главной странице в каждом разделе.

Вернуться в «Бета-версии модов для phpBB 2.0.x»