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

Небольшие моды и хаки для форума phpBB3
Правила форума
При размещении мода/статьи взятой с другого форума/сайта обязательно необходимо указывать первоисточник сообщения.
Аватара пользователя
PPK
Администратор
Благодарил (а): 74 раза
Поблагодарили: 1550 раз
Сообщения: 9737
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

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

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 сообщений на страницу):
Стандартный мод репутации:

После установки мода:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Go
Gordon Freeman
Откуда: Одесса, Украина
Сообщения: 9
Зарегистрирован: 04 июн 2014, 23:40
Сообщение

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

12 июн 2014, 01:14

Этот мод работает на вашем форуме?

Добавлено спустя 3 минуты 24 секунды:
Выложите уже оптимизированную версию этой модификации, если конечно есть такая возможность. А лучше включите мод в ваши сборки.
Аватара пользователя
PPK
Администратор
Благодарил (а): 74 раза
Поблагодарили: 1550 раз
Сообщения: 9737
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

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

12 июн 2014, 10:16

на этом форуме "самописный", есть мысли выложить его (как и мод спасибо отсюда), но пока не до этого ..
Go
Gordon Freeman
Откуда: Одесса, Украина
Сообщения: 9
Зарегистрирован: 04 июн 2014, 23:40
Сообщение

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

12 июн 2014, 12:26

Ладно, подождем...
e-
e-planet
Благодарил (а): 2 раза
Сообщения: 8
Зарегистрирован: 20 мар 2014, 07:42
Сообщение

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

27 июл 2014, 19:16

Здравствуйте PPK!
Вы не могли бы нам помочь или подсказать, как сделать на memberlist_view прибавление репутации + и -?
Как можно реализовать и на страничке темы и в профиле так? Подскажите если знаете?
Аватара пользователя
PPK
Администратор
Благодарил (а): 74 раза
Поблагодарили: 1550 раз
Сообщения: 9737
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

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

28 июл 2014, 12:03

у этого мода нет возможности изменения репутации не через сообщения, поэтому даже если сделать кнопки - работать не будет, у этого Мод Reputation System - инструкция для стиля subsilver2 мода есть.
Аватара пользователя
9CaraTT
Откуда: 2800 км. от Амстердама.
Благодарил (а): 225 раз
Поблагодарили: 228 раз
Сообщения: 3054
Зарегистрирован: 13 мар 2011, 15:23
Сообщение

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

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 лень писать инструкцию, сами догоните ...
Аватара пользователя
PPK
Администратор
Благодарил (а): 74 раза
Поблагодарили: 1550 раз
Сообщения: 9737
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

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

05 сен 2014, 15:27

9CaraTT писал(а):Да, можно, можно ...
там наверное имелось ввиду именно прибавление/убавление репутации, вывести сам показатель репутации можно куда угодно .. :unknown:
Аватара пользователя
9CaraTT
Откуда: 2800 км. от Амстердама.
Благодарил (а): 225 раз
Поблагодарили: 228 раз
Сообщения: 3054
Зарегистрирован: 13 мар 2011, 15:23
Сообщение

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

05 сен 2014, 15:33

Ну тогда не знаю как это реализовать ...

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