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

       

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

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

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

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

9 сообщений
 • Страница 1 из 1
Просмотры: 1588 • 
Аватара пользователя
PPK
Администратор
Сообщения: 10554
Зарегистрирован: 21 мар 2009, 17:13
Сообщение 28 апр 2014, 18:19
Существует мод репутации 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
Пользователь
Сообщения: 9
Зарегистрирован: 04 июн 2014, 23:40
Сообщение 12 июн 2014, 01:14
Этот мод работает на вашем форуме?

Добавлено спустя 3 минуты 24 секунды:
Выложите уже оптимизированную версию этой модификации, если конечно есть такая возможность. А лучше включите мод в ваши сборки.
Gordon Freeman
Аватара пользователя
PPK
Администратор
Сообщения: 10554
Зарегистрирован: 21 мар 2009, 17:13
Сообщение 12 июн 2014, 10:16
на этом форуме "самописный", есть мысли выложить его (как и мод спасибо отсюда), но пока не до этого ..
PPK
Gordon Freeman
Пользователь
Сообщения: 9
Зарегистрирован: 04 июн 2014, 23:40
Сообщение 12 июн 2014, 12:26
Ладно, подождем...
Gordon Freeman
e-planet
Пользователь
Сообщения: 8
Зарегистрирован: 20 мар 2014, 07:42
Сообщение 27 июл 2014, 19:16
Здравствуйте PPK!
Вы не могли бы нам помочь или подсказать, как сделать на memberlist_view прибавление репутации + и -?
Как можно реализовать и на страничке темы и в профиле так? Подскажите если знаете?
e-planet
Аватара пользователя
PPK
Администратор
Сообщения: 10554
Зарегистрирован: 21 мар 2009, 17:13
Сообщение 28 июл 2014, 12:03
у этого мода нет возможности изменения репутации не через сообщения, поэтому даже если сделать кнопки - работать не будет, у этого Мод Reputation System - инструкция для стиля subsilver2 мода есть.
PPK
Аватара пользователя
9CaraTT
VIP
Сообщения: 3095
Зарегистрирован: 13 мар 2011, 15:23
Сообщение 05 сен 2014, 15:00
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
Администратор
Сообщения: 10554
Зарегистрирован: 21 мар 2009, 17:13
Сообщение 05 сен 2014, 15:27
9CaraTT писал(а):Да, можно, можно ...
там наверное имелось ввиду именно прибавление/убавление репутации, вывести сам показатель репутации можно куда угодно .. :unknown:
PPK
Аватара пользователя
9CaraTT
VIP
Сообщения: 3095
Зарегистрирован: 13 мар 2011, 15:23
Сообщение 05 сен 2014, 15:33
Ну тогда не знаю как это реализовать ...
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-2025 @ PPK
  • Часовой пояс: UTC+04:00
Участники темы
Список форумов Участники темы
Перейти
Сайт ↳   Новости по сайту ↳   Новости обновлений ↳   Вопросы по сайту ↳   Non-russian speakers forum phpBB 3.1-3.3 ↳   Расширения для phpBB 3.1-3.3 ↳   Условно-бесплатные расширения ↳   Платные расширения ↳   Расширения для подписчиков ↳   Расширения в разработке ↳   База расширений ↳   Поиск и запросы расширений ↳   Запросы расширений, функционала и переводов для подписчиков ↳   Переводы расширений для phpBB3.1-3.3 ↳   Стили для phpBB 3.1-3.3 ↳   Вопросы по phpBB 3.1-3.3 ppkBB3cker ↳   Новости по трекеру и обновлениям ↳   Ошибки, проблемы, недочёты ↳   Предложения по новым функциям и возможностям ↳   Вопросы, ответы и примеры решений ↳   Моды и стили для трекера ↳   Готовые стили для трекера ↳   Запросы стилей для трекера ↳   Стили в разработке ↳   Готовые моды для трекера ↳   Запросы модов для трекера ↳   Моды в разработке ↳   Остальное ↳   F.A.Q. ↳   Ваши трекеры ↳   Оффтопик xbtBB3cker ↳   Новости по трекеру и обновлениям ↳   Вопросы, ответы, ошибки и обсуждение phpBB 3.0 ↳   Другие моды для phpBB3 ↳   Минимоды и хаки для phpBB3 ↳   Вопросы по phpBB3 ↳   phpBB3 ppkBB3cker Edition ↳   Платные услуги, моды, стили ↳   BB2Spoiler/BB3Spoiler ↳   BB3Topics ↳   BB3Sape ↳   BB3UserAgentInfo