Спасибо за сообщение (система рейтинга)

Проблемы с установкой или работой phpBB 3.0.х. Решение проблем связанных с модами, стилями, доработками и так далее.
Аватара пользователя
Slash
Администратор
Сообщения: 2208
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 81 раз

Спасибо за сообщение (система рейтинга)

#1

Сообщение Slash » Пт апр 26, 2013 9:12 am

Мод добавляет возможность поблагодарить автора сообщения (отменить благодарность), а также использовать систему рейтинга.
Автор: Палыч
Актуальная версия (на данный момент): 1.3.5
Тема на официальном сайте phpbb: http://www.phpbbguru.net/community/topic25848.html

Возможно кому то пригодится делаем в мини профиле число поблагодаривших и отблагодаривших в одну строчку, тем самым немного сэкономим место в мини профиле.
Открыть: styles/prosilver/template/viewtopic_body.html, найти:

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

        <!-- IF not postrow.S_POST_ANONYMOUS and postrow.THANKS_COUNTERS_VIEW -->
            <dd><strong>{L_GIVEN}:</strong><!-- IF postrow.POSTER_GIVE_COUNT < 1 --> {postrow.POSTER_GIVE_COUNT} {L_THANK}<!-- ELSEIF postrow.POSTER_GIVE_COUNT > 1 --> <a href="{postrow.POSTER_GIVE_COUNT_LINK}">{postrow.POSTER_GIVE_COUNT}</a> {L_THANKS}<!-- ELSE --> <a href="{postrow.POSTER_GIVE_COUNT_LINK}">{postrow.POSTER_GIVE_COUNT}</a> {L_THANK}<!-- ENDIF --></dd>
            <dd><strong>{L_RECEIVED}:</strong><!-- IF postrow.POSTER_RECEIVE_COUNT < 1 --> {postrow.POSTER_RECEIVE_COUNT} {L_THANK}<!-- ELSEIF postrow.POSTER_RECEIVE_COUNT > 1 --> <a href="{postrow.POSTER_RECEIVE_COUNT_LINK}">{postrow.POSTER_RECEIVE_COUNT}</a> {L_THANKS}<!-- ELSE --> <a href="{postrow.POSTER_RECEIVE_COUNT_LINK}">{postrow.POSTER_RECEIVE_COUNT}</a> {L_THANK}<!-- ENDIF --></dd>
        <!-- ENDIF --> 
заменить на:

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

        <!-- IF not postrow.S_POST_ANONYMOUS and postrow.THANKS_COUNTERS_VIEW -->        
        <dd><strong>{L_GRATITUDES}:</strong> <!-- IF postrow.POSTER_RECEIVE_COUNT < 1 -->{postrow.POSTER_RECEIVE_COUNT}<!-- ELSEIF postrow.POSTER_RECEIVE_COUNT > 1 --><a href="{postrow.POSTER_RECEIVE_COUNT_LINK}" title="{L_RECEIVED}: {postrow.POSTER_RECEIVE_COUNT} {L_THANK}">{postrow.POSTER_RECEIVE_COUNT}</a><!-- ELSE --><a href="{postrow.POSTER_RECEIVE_COUNT_LINK}" title="{L_RECEIVED}: {postrow.POSTER_RECEIVE_COUNT} {L_THANK}">{postrow.POSTER_RECEIVE_COUNT}</a><!-- ENDIF --> / <!-- IF postrow.POSTER_GIVE_COUNT < 1 -->{postrow.POSTER_GIVE_COUNT}<!-- ELSEIF postrow.POSTER_GIVE_COUNT > 1 --><a href="{postrow.POSTER_GIVE_COUNT_LINK}" title="{L_GIVEN}: {postrow.POSTER_GIVE_COUNT} {L_THANK}">{postrow.POSTER_GIVE_COUNT}</a><!-- ELSE --><a href="{postrow.POSTER_GIVE_COUNT_LINK}" title="{L_GIVEN}: {postrow.POSTER_GIVE_COUNT} {L_THANK}">{postrow.POSTER_GIVE_COUNT}</a><!-- ENDIF --></dd>    
        <!-- ENDIF --> 
Примеры (скрины):
Изображение Изображение

Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2208
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 81 раз

Re: Спасибо за сообщение (система рейтинга)

#2

Сообщение Slash » Чт дек 24, 2015 9:17 pm

После миграции на сервер с версией php 5.6 появилась проблема: при нажатии кнопки благодарности выходит сообщение:
Некорректные параметры запрошенного действия
при этом благодарность засчитывается. Эту сообщение генерируется в файле includes/functions_thanks.php (~138 строка):

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

			trigger_error($user->lang['INCORRECT_THANKS'] . '<br /><br /><a href="'.append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $post_id . '#p' . $post_id) . '">' . $user->lang['RETURN_POST'] . '</a>');
Решение пока не нашел...

cefp
Сообщения: 339
Зарегистрирован: Ср окт 17, 2012 6:49 pm
Поблагодарили: 3 раза

Re: Спасибо за сообщение (система рейтинга)

#3

Сообщение cefp » Пт дек 25, 2015 4:11 pm

Не получается скачать файлы мода по указанной ссылке, интересно поглядеть на код всего файла.
d o h o d - s - n u l y a .ru - идеи бизнеса.

Аватара пользователя
Slash
Администратор
Сообщения: 2208
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 81 раз

Re: Спасибо за сообщение (система рейтинга)

#4

Сообщение Slash » Пт дек 25, 2015 6:39 pm

cefp писал(а):Не получается скачать файлы мода
Скачать можно тут: http://www.phpbbguru.net/files/mods/ (в самом низу).

Подозреваю, что проблема в сервере, а не в движке, так как много ошибок связано с неправильным полученным результатом запроса в БД.
Почему то выходит, что запись якобы существует, но на самом деле её нет. И я бы мог продолжать искать ошибку в файлах движка, если бы это был единственный случай, но это происходит везде, где выполняется проверка на существование записи, во всех моих сайтах. Данные ошибки появились сразу после миграции, до переезда все было нормально. В общем сделал (сегодня ночью), хостеру написал, жду решения.

cefp
Сообщения: 339
Зарегистрирован: Ср окт 17, 2012 6:49 pm
Поблагодарили: 3 раза

Re: Спасибо за сообщение (система рейтинга)

#5

Сообщение cefp » Пт дек 25, 2015 9:08 pm

Скачал, посмотрел. Вот фрагмент кода, где, как я понял происходит добавление в базу данных информации о новой благодарности и проверка, выводящая сообщение об ошибке:

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

if ($user->data['user_type'] != USER_IGNORE && !empty($to_id))
	{
		if ($row['poster_id'] != $user_id && $row['poster_id'] == $to_id && !already_thanked($post_id, $user_id) && ($auth->acl_get('f_thanks', $row['forum_id']) || (!$row['forum_id'] && (isset($config['thanks_global_post']) ? $config['thanks_global_post'] : false))) && $from_id == $user_id)
		{
			$sql = 'INSERT INTO ' . THANKS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
				'user_id'	=> (int) $user_id,
				'post_id'	=> $post_id,
				'poster_id'	=> $to_id,
				'topic_id'	=> (int) $row['topic_id'],
				'forum_id'	=> (int) $row['forum_id'],
				'thanks_time'	=> time()
			));
			$db->sql_query($sql);
		
			$lang_act = 'GIVE';
			if (isset($config ['thanks_notice_on']) ? $config ['thanks_notice_on'] : false)
			{
				send_thanks_pm($user_id, $to_id, $send_pm = true, $post_id, $lang_act);
				send_thanks_email($to_id, $post_id, $lang_act);
			}	
			if (isset($config['thanks_info_page']) ? $config['thanks_info_page'] : false)
			{
				meta_refresh (1, append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id .'&p=' . $post_id . '#p' . $post_id));
				trigger_error($user->lang['THANKS_INFO_'.$lang_act] . '<br /><br /><a href="'.append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id .'&p=' . $post_id . '#p' . $post_id) . '">' . $user->lang['RETURN_POST'] . '</a>');
			}
			else
			{
				redirect (append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $post_id . '#p' . $post_id));			
			}
		}
		elseif (!$row['forum_id'] && (isset($config['thanks_global_post']) ? !$config['thanks_global_post'] : true))
		{
			trigger_error($user->lang['GLOBAL_INCORRECT_THANKS'] . '<br /><br /><a href="'.append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $post_id . '#p' . $post_id) . '">' . $user->lang['RETURN_POST'] . '</a>');
		}
		else
		{
			trigger_error($user->lang['INCORRECT_THANKS'] . '<br /><br /><a href="'.append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $post_id . '#p' . $post_id) . '">' . $user->lang['RETURN_POST'] . '</a>');
		}
	}
В третьей строке этого фрагмента есть условие if, далее следует код, который добавляет информацию в базу данных, потом в 31 строке идет elseif при выполнение которого срабатывает вывод сообщения об ошибке. И в 35 строке else. Но это взаимоисключающие события. Если первое условие истинно, то второе и третье не должны выполняться. Или не так? Сейчас получается, что одновременно выполняются первое и третье условие.

Добавлено спустя 3 минуты 46 секунд:
Можно попробовать скачать с сервера файл в двоичном режиме, и проверить его, может быть при переносе на новый хостинг закралась ошибка.

Добавлено спустя 12 минут 56 секунд:
Еще один вариант: изменения в базу данных вносятся до того как она проверяется на наличие в ней информации. То есть проверка осуществляется сразу после добавления информации.

Можно пробовать поменять последовательность строк: сначала проверить есть ли информация в базе данных, и если нет, то выполнять тот код что раньше. Но это частный случай, лучше конечно разобраться в сути проблемы, раз в других файлах есть такие же ошибки.
d o h o d - s - n u l y a .ru - идеи бизнеса.

Аватара пользователя
Slash
Администратор
Сообщения: 2208
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 81 раз

Re: Спасибо за сообщение (система рейтинга)

#6

Сообщение Slash » Пт дек 25, 2015 9:16 pm

cefp писал(а):Если первое условие истинно, то второе и третье не должны выполняться.
Правильно думаете.
cefp писал(а):Можно попробовать скачать с сервера файл в двоичном режиме, и проверить его, может быть при переносе на новый хостинг закралась ошибка.
Я уже проверил, сделал пару тестов, с исходником все в порядке.
cefp писал(а):изменения в базу данных вносятся до того как она проверяется на наличие в ней информации
Я это исключаю...

Хостер сообщил, что в данный момент решают эту проблему.

cefp
Сообщения: 339
Зарегистрирован: Ср окт 17, 2012 6:49 pm
Поблагодарили: 3 раза

Re: Спасибо за сообщение (система рейтинга)

#7

Сообщение cefp » Пт дек 25, 2015 10:01 pm

Не помните, какая версия php бала на предыдущем хостинге? Вот что нашел для php 5.4
isset - 5.4.0 - Проверка нечислового индекса строки теперь возвращает FALSE.

Для более поздних версий, как я понял тоже самое. Но даже если там не числа, то навряд ли это объясняет срабатывание двух условий.
d o h o d - s - n u l y a .ru - идеи бизнеса.

Аватара пользователя
Slash
Администратор
Сообщения: 2208
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 81 раз

Re: Спасибо за сообщение (система рейтинга)

#8

Сообщение Slash » Пт дек 25, 2015 10:22 pm

cefp писал(а):Не помните, какая версия php бала на предыдущем хостинге?
Версия была 5.4.
cefp писал(а):даже если там не числа
Тестирую:

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

$a = 'Текст';
echo (isset($a)) ? 'Успех!' : 'Провал';
На экране:
Успех!

cefp
Сообщения: 339
Зарегистрирован: Ср окт 17, 2012 6:49 pm
Поблагодарили: 3 раза

Re: Спасибо за сообщение (система рейтинга)

#9

Сообщение cefp » Вс дек 27, 2015 3:45 pm

Смотрю, сейчас нормально работает, удалось выяснить причину?
d o h o d - s - n u l y a .ru - идеи бизнеса.

Аватара пользователя
Slash
Администратор
Сообщения: 2208
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 81 раз

Re: Спасибо за сообщение (система рейтинга)

#10

Сообщение Slash » Вс дек 27, 2015 4:06 pm

cefp писал(а):удалось выяснить причину?
Причина мне была ясна почти сразу, как посыпались ошибки. Причина этому была сервер, к сожалению хостер этого не хотел признавать и видимо не признает и сейчас. Пришлось сменить хостера, и вот! Та же версия php (5.6).

Кстати, все эти ошибки: Проблема с Cookies (Куки), Re: User Reputation Points, You have already "liked" this feed (phpFox) и многие другие, тоже были из-за сервера. Целую неделю были проблемы по вине хостера. Я даже немного устал, устрою себе выходной, выпью кваса.

cefp, спасибо, что был рядом! С наступающим ;)

cefp
Сообщения: 339
Зарегистрирован: Ср окт 17, 2012 6:49 pm
Поблагодарили: 3 раза

Re: Спасибо за сообщение (система рейтинга)

#11

Сообщение cefp » Вс дек 27, 2015 7:11 pm

Пожалуйста :)
Спасибо за сообщение система рейтинга  - s_novym_godom.jpg
Спасибо за сообщение система рейтинга - s_novym_godom.jpg (94.08 КБ) 1057 просмотров
d o h o d - s - n u l y a .ru - идеи бизнеса.

Ответить Пред. темаСлед. тема

Кто сейчас на конференции

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