Магазин
Правила Ответы на вопросы Конфиденциальность
Магазин
Правила Ответы на вопросы Конфиденциальность
  • Быстрые действия Ярлыки
    Общие действия
    Связаться с администрацией
    • Бот

       

Минимоды и хаки для phpBB3

  • Список форумов
  • Форумы по phpBB 3.0
  • Другие моды для phpBB 3.0
  • Минимоды и хаки для phpBB3

User reputation points 0.3.5 - оптимизация

Небольшие моды и хаки для форума phpBB3
Правила форума
При размещении мода/статьи взятой с другого форума/сайта обязательно необходимо указывать первоисточник сообщения.

9 сообщений
 • Страница 1 из 1
Просмотры: 1617 • 
  • Аватара пользователя
    PPK Сообщение 28.04.2014
    Существует мод репутации User reputation points (https://www.phpbb.com/community/viewtop ... &t=2135824, http://www.phpbbguru.net/community/topic19696.html) который добавляет функции репутации на форум.
    "Особенность" этого мода в том, что на странице сообщений для отображения репутации он делает на каждое сообщение 2 sql запроса, если на одной странице у вас 3 сообщения, мод сделает 6 sql запросов, если 50 сообщений - 100 sql запросов, т.е. кол. запросов прямо пропорционально кол. сообщений.
    Кеширование sql запросов в этом случае выглядит не лучшей альтернативой, т.к. вместо 100 sql запросов сервер будет делать 100 чтений из файлов, а кол. кешированных файлов будет равняться кол. пользователей на форуме.
    Небольшой мод который оптимизирует мод (переделывает принцип его работы), после чего независмо от кол. сообщений на странице мод будет добавлять 2 sql запроса дя отображения репутации.

    1. Переделать файлы:

    viewtopic.php заменить

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

    $user->add_lang('mods/reputation_mod');
    на

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

    $config['rp_enable'] ? $user->add_lang('mods/reputation_mod') : '';
    заменить

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

    $reputation->viewtopic($forum_id);
    на

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

    $config['rp_enable'] ? $reputation->viewtopic($forum_id) : '';
    заменить

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

    $reputation_cache = $reputation->get_user_reputation($id_cache);
    на

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

    if($config['rp_enable'])
    {
    	$reputation_cache = $reputation->get_user_reputation($id_cache);
    	$reputation->grab_infos($id_cache);
    }
    заменить

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

    	$postrow = array_merge($postrow, $reputation->reputation_row($poster_id, $row['post_id'], $reputation_cache));
    на

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

    	$config['rp_enable'] ? $postrow = array_merge($postrow, $reputation->reputation_row($poster_id, $row['post_id'], $reputation_cache)) : '';
    2. Скачать архив, распаковать, заменить файлы форума файлами из директории /root/
    urp_035_optimization.zip
    --
    Скриншоты (в настройках форума установлено отображение по 30 сообщений на страницу):
    Стандартный мод репутации:

    После установки мода:
    У вас нет необходимых прав для просмотра вложений в этом сообщении. Попробуйте зарегистрироваться или войти на форум.
PPK
  • Gordon Freeman Сообщение 12.06.2014
    Этот мод работает на вашем форуме?

    Добавлено спустя 3 минуты 24 секунды:
    Выложите уже оптимизированную версию этой модификации, если конечно есть такая возможность. А лучше включите мод в ваши сборки.
Gordon Freeman
  • Аватара пользователя
    PPK Сообщение 12.06.2014
    на этом форуме "самописный", есть мысли выложить его (как и мод спасибо отсюда), но пока не до этого ..
PPK
  • Gordon Freeman Сообщение 12.06.2014
    Ладно, подождем...
Gordon Freeman
  • e-planet Сообщение 27.07.2014
    Здравствуйте PPK!
    Вы не могли бы нам помочь или подсказать, как сделать на memberlist_view прибавление репутации + и -?
    Как можно реализовать и на страничке темы и в профиле так? Подскажите если знаете?
e-planet
  • Аватара пользователя
    PPK Сообщение 28.07.2014
    у этого мода нет возможности изменения репутации не через сообщения, поэтому даже если сделать кнопки - работать не будет, у этого Мод Reputation System - инструкция для стиля subsilver2 мода есть.
PPK
  • Аватара пользователя
    9CaraTT Сообщение 05.09.2014
    e-planet » 27 июл 2014, 19:16 писал(а):Здравствуйте PPK!
    Вы не могли бы нам помочь или подсказать, как сделать на memberlist_view прибавление репутации + и -?
    Как можно реализовать и на страничке темы и в профиле так? Подскажите если знаете?

    Да, можно, можно ... :facepalm:

    Открыть: functions_reputation.php
    Найти:

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

    		global $auth, $phpbb_root_path, $phpEx, $user;
    Заменить на:

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

    		global $auth, $db, $phpbb_root_path, $phpEx, $user;
    
    		$sql = 'SELECT SUM(CASE WHEN rep_point > 0 THEN 1 ELSE 0 END) AS positive, SUM(CASE WHEN rep_point < 0 THEN 1 ELSE 0 END) AS negative
    			FROM ' . REPUTATIONS_TABLE . '
    			WHERE rep_to = ' . $poster_id;
    		$result = $db->sql_query($sql);
    		$row = $db->sql_fetchrow($result);
    		$db->sql_freeresult($result);
    Найти:

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

    				'REPUTATION_BLOCK'	=> $this->get_images($poster_id),
    После вставить:

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

    				'REPUTATION_POS'	=> isset($row['positive']) ? $row['positive'] : 0,
    				'REPUTATION_NEG'	=> isset($row['negative']) ? $row['negative'] : 0,

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

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

    					<!-- IF S_REPUTATION and postrow.S_USER_REPUTATION -->
    					<!-- IF S_REP_DISPLAY neq 'block' --><br /><strong>{L_RP_TOTAL_POINTS}:</strong> {postrow.REPUTATION_TEXT}<!-- ENDIF -->
    					<!-- IF S_REP_DISPLAY neq 'text'  --><br /><!-- IF postrow.U_VIEW_REP --><a href="{postrow.U_VIEW_REP}" onclick="popup(this.href, 780, 550); return false;" ><!-- ENDIF -->{postrow.REPUTATION_BLOCK}<!-- IF postrow.U_VIEW_REP --></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- IF postrow.S_GIVE_REPUTATION --><br /><a href="{postrow.U_ADD_POS}"><img src="{T_IMAGES_PATH}reputation/add.png" title="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" /></a><!-- IF postrow.S_GIVE_NEGATIVE--><a href="{postrow.U_ADD_NEG}"><img src="{T_IMAGES_PATH}reputation/subtract.png" title="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" /></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- ENDIF -->
    Заменить на:

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

     					<!-- IF S_REPUTATION and postrow.S_USER_REPUTATION -->
    					<!-- IF S_REP_DISPLAY neq 'block' --><br /><strong>{L_RP_TOTAL_POINTS}:</strong> {postrow.REPUTATION_TEXT} (+{postrow.REPUTATION_POS} -{postrow.REPUTATION_NEG})<!-- ENDIF -->
    					<!-- IF S_REP_DISPLAY neq 'text'  --><br /><!-- IF postrow.U_VIEW_REP --><a href="{postrow.U_VIEW_REP}" onclick="popup(this.href, 780, 550); return false;" ><!-- ENDIF -->{postrow.REPUTATION_BLOCK}<!-- IF postrow.U_VIEW_REP --></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- IF postrow.S_GIVE_REPUTATION --><br /><a href="{postrow.U_ADD_POS}"><img src="{T_IMAGES_PATH}reputation/add.png" title="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" /></a><!-- IF postrow.S_GIVE_NEGATIVE--><a href="{postrow.U_ADD_NEG}"><img src="{T_IMAGES_PATH}reputation/subtract.png" title="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" /></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- ENDIF -->
    
    Открыть: styles/subsilver2/template/viewtopic_tracker_body.html
    Найти:

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

    					<!-- IF S_REPUTATION and postrow.S_USER_REPUTATION -->
    					<!-- IF S_REP_DISPLAY neq 'block' --><br /><strong>{L_RP_TOTAL_POINTS}:</strong> {postrow.REPUTATION_TEXT}<!-- ENDIF -->
    					<!-- IF S_REP_DISPLAY neq 'text'  --><br /><!-- IF postrow.U_VIEW_REP --><a href="{postrow.U_VIEW_REP}" onclick="popup(this.href, 780, 550); return false;" ><!-- ENDIF -->{postrow.REPUTATION_BLOCK}<!-- IF postrow.U_VIEW_REP --></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- IF postrow.S_GIVE_REPUTATION --><br /><a href="{postrow.U_ADD_POS}"><img src="{T_IMAGES_PATH}reputation/add.png" title="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" /></a><!-- IF postrow.S_GIVE_NEGATIVE--><a href="{postrow.U_ADD_NEG}"><img src="{T_IMAGES_PATH}reputation/subtract.png" title="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" /></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- ENDIF -->
    Заменить на:

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

     					<!-- IF S_REPUTATION and postrow.S_USER_REPUTATION -->
    					<!-- IF S_REP_DISPLAY neq 'block' --><br /><strong>{L_RP_TOTAL_POINTS}:</strong> {postrow.REPUTATION_TEXT} (+{postrow.REPUTATION_POS} -{postrow.REPUTATION_NEG})<!-- ENDIF -->
    					<!-- IF S_REP_DISPLAY neq 'text'  --><br /><!-- IF postrow.U_VIEW_REP --><a href="{postrow.U_VIEW_REP}" onclick="popup(this.href, 780, 550); return false;" ><!-- ENDIF -->{postrow.REPUTATION_BLOCK}<!-- IF postrow.U_VIEW_REP --></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- IF postrow.S_GIVE_REPUTATION --><br /><a href="{postrow.U_ADD_POS}"><img src="{T_IMAGES_PATH}reputation/add.png" title="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_ADD_POINTS} {postrow.POST_AUTHOR}" /></a><!-- IF postrow.S_GIVE_NEGATIVE--><a href="{postrow.U_ADD_NEG}"><img src="{T_IMAGES_PATH}reputation/subtract.png" title="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" alt="{L_RP_SUBTRACT_POINTS} {postrow.POST_AUTHOR}" /></a><!-- ENDIF --><!-- ENDIF -->
    					<!-- ENDIF -->
    

    Открыть: memberlist.php
    Найти:

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

    			'U_REMOVE_FOE'		=> ($foe && $foes_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&remove=1&mode=foes&usernames[]=' . $user_id) : '',
    		));
    Добавить после:

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

    		$sql = 'SELECT SUM(CASE WHEN rep_point > 0 THEN 1 ELSE 0 END) AS positive, SUM(CASE WHEN rep_point < 0 THEN 1 ELSE 0 END) AS negative
    			FROM ' . REPUTATIONS_TABLE . '
    			WHERE rep_to = ' . $user_id;
    		$result = $db->sql_query($sql);
    		$row = $db->sql_fetchrow($result);
    		$db->sql_freeresult($result);
    Найти:

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

    		$user->add_lang('mods/reputation_mod');
    		$template->assign_vars(array(
    			'S_REPUTATION'		=> $member['user_hide_reputation'] ? false : true,
    			'REPUTATION'		=> $member['user_reputation'],
    			'REP_POWER'			=> $reputation->get_rep_power($member['user_posts'], $member['user_regdate'], $member['user_reputation'], $member['group_id']),
    Добавить после:

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

    			'U_VIEW_REP' 		=> ($auth->acl_get('u_rp_view_comment') || ($auth->acl_get('m_rp_moderate')) || $poster_id == $member['user_id']) ? append_sid("{$phpbb_root_path}viewreputation.$phpEx", 'id=' . $member['user_id']) : '',
    			'REPUTATION_POS'	=> isset($row['positive']) ? $row['positive'] : 0,
    			'REPUTATION_NEG'	=> isset($row['negative']) ? $row['negative'] : 0,
    Открыть: styles/subsilver2/template/memberlist_view.html
    Найти:

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

    			<!-- IF S_REPUTATION -->
    			<tr>
    				<td class="gen" align="{S_CONTENT_FLOW_END}" valign="top" nowrap="nowrap">{L_RP_TOTAL_POINTS}: </td>
    				<td><b class="gen">{REPUTATION}</b></td>
    			</tr>
    			<tr>
    				<td class="gen" align="{S_CONTENT_FLOW_END}" valign="top" nowrap="nowrap">{L_RP_POWER}: </td>
    				<td><b class="gen">{REP_POWER}</b></td>
    			</tr>
    			<!-- ENDIF -->
    Заменить на:

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

    			<!-- IF S_REPUTATION -->
    			<tr>
    				<td class="gen" align="{S_CONTENT_FLOW_END}" valign="top" nowrap="nowrap">{L_RP_TOTAL_POINTS}: </td>
    				<td><b class="gen">{REPUTATION}</b> (+{REPUTATION_POS} / -{REPUTATION_NEG})</td>
    			</tr>
    			<tr>
    				<td class="gen" align="{S_CONTENT_FLOW_END}" valign="top" nowrap="nowrap">{L_RP_POWER}: </td>
    				<td><b class="gen">{REP_POWER}</b></td>
    			</tr>
    			<!-- ENDIF -->
    Правда запросов прибавляется, но это наверное решаемо. Для стиля prosilver лень писать инструкцию, сами догоните ...
9CaraTT
  • Аватара пользователя
    PPK Сообщение 05.09.2014
    9CaraTT писал(а):Да, можно, можно ...
    там наверное имелось ввиду именно прибавление/убавление репутации, вывести сам показатель репутации можно куда угодно .. :unknown:
PPK
  • Аватара пользователя
    9CaraTT Сообщение 05.09.2014
    Ну тогда не знаю как это реализовать ...
9CaraTT
9 сообщений
 • Страница 1 из 1

Вернуться в «Минимоды и хаки для phpBB3»

Time: 0.000s | Queries: 0 | Peak Memory Usage: 0.00 МБ | GZIP: Unknown | SQL Explain
  • Список форумов
2018, made with by ThemeKita Создано на основе phpBB® Forum Software © phpBB Limited Русская поддержка phpBB (C) 2009-2026 @ PPK
  • Часовой пояс: UTC+04:00
Участники темы
Список форумов Участники темы
Перейти
Сайт ↳   Новости по сайту ↳   Новости обновлений ↳   Вопросы по сайту ↳   Non-russian speakers forum Форумы по phpBB 3.1-3.3 ↳   Расширения для phpBB 3.1-3.3 ↳   Бета-версии и расширения в разработке ↳   База расширений ↳   Поиск и запросы расширений ↳   Расширения для phpBB 3.1-3.3 для донаторов ↳   Условно-бесплатные расширения ↳   Платные расширения ↳   Расширения для подписчиков ↳   Запросы расширений, функционала и переводов для подписчиков ↳   Переводы расширений для phpBB3.1-3.3 ↳   Стили для phpBB 3.1-3.3 ↳   Вопросы по phpBB 3.1-3.3 Форумы по phpBB 3.0 ↳   Мод трекера ppkBB3cker ↳   Новости по трекеру и обновлениям ↳   Ошибки, проблемы, недочёты ↳   Предложения по новым функциям и возможностям ↳   Вопросы, ответы и примеры решений ↳   Моды и стили для трекера ↳   Готовые стили для трекера ↳   Запросы стилей для трекера ↳   Стили в разработке ↳   Готовые моды для трекера ↳   Запросы модов для трекера ↳   Моды в разработке ↳   Остальное ↳   Часто задаваемые вопросы ↳   Ваши трекеры ↳   Мод трекера xbtBB3cker ↳   Новости по трекеру и обновлениям ↳   Вопросы, ответы, ошибки и обсуждение ↳   Другие моды для phpBB 3.0 ↳   Минимоды и хаки для phpBB3 ↳   phpBB 3.0 ppkBB3cker Edition ↳   Платные услуги, моды, стили для phpBB 3.0 ↳   BB2Spoiler/BB3Spoiler ↳   BB3Topics ↳   BB3Sape ↳   BB3UserAgentInfo ↳   Вопросы по phpBB 3.0 ↳   Вне тематики форума