Проблема с сортировкой перенесенных тем

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Slon77
phpBB 1.4.2
Сообщения: 52
Стаж: 20 лет 3 месяца
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Проблема с сортировкой перенесенных тем

Сообщение Slon77 »

Описание проблемы: Проблема с сортировкой перенесенных тем
Произведенные изменения, после которых начались неполадки: переход с 3.0.5 на 3.0.9 (однако, ранее перенесенными темами на Форуме не пользовались)
Версия phpBB: 3.0.9
Используемые стили: prosilver
Используемые моды: Seo mod, thanx mod, mycalendar
Версия PHP: PHP Version 5.1.6
Используемая СУБД и её версия: MySQL(i) 5.0.77
Ссылка на конференцию: http://forum.gotango.ru/
Есть ли у вас тестовый аккаунт: нет
Использовался ли поиск для решения проблемы: да
Если да, то какие запросы вы использовали: перенесен* тем* , shadow topic

Возникла проблема с отображением перенесенных тем (далее - п.т.) в 1 разделе.
http://forum.gotango.ru/tango-afisha/ (это раздел, в котором наблюдается проблема; в других разделах перенесенные топики не используются)
По умолчанию они должны сортироваться по времени последнего поста, чего не происходит (логики в сортировке п.т. вообще не нашел..)
Хотя принудительная сортировка на п.т. какое-то воздействие оказывает.

Если в phpmyadmin подобный запрос работает "как надо".
SELECT *
FROM topics t
WHERE topic_id
IN ( 14342, 14409, 12846, 14718, 14780, 14786, 14770, 14500, 14554, 14673 )
ORDER BY t.topic_last_post_time

(внесение таких изменений в запрос в viewforum.php результата не дало).
Просьба помочь разобраться с проблемой сортировки перенесенных тем.
Спасибо!
Аватара пользователя
владимир1983
phpBB 3.2.6
Сообщения: 5954
Стаж: 16 лет 4 месяца
Откуда: Сергиев Посад
Благодарил (а): 373 раза
Поблагодарили: 727 раз

Re: Проблема с сортировкой перенесенных тем

Сообщение владимир1983 »

Slon77, покажите на примере неправильную сортировку тем.
За ваши деньги решу ваши проблемы. Стучи в ЛС.
Нет человека - нет проблемы. (c)
Slon77
phpBB 1.4.2
Сообщения: 52
Стаж: 20 лет 3 месяца
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Проблема с сортировкой перенесенных тем

Сообщение Slon77 »

Верхние 10 тем этого раздела:
http://forum.gotango.ru/tango-afisha/

Например:

Бархатное Танго-2011 14-18 сентября п.Курортное, Коктебель
Последнее сообщение ElenaS
Чт сен 22, 2011 12:28

Планетанго-7 с 28 октября по 1 ноября
Последнее сообщение Lagarto
Пт окт 07, 2011 13:37

Ночи Милонгеро 2012 с 15 по 20 августа
Последнее сообщение tuma-tuma
Чт сен 15, 2011 10:52

и другие перенесенные темы.
Если в какую-то тему написать новое сообщение, порядок отображения не изменится.
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Проблема с сортировкой перенесенных тем

Сообщение Палыч »

Slon77
Вообщем-то, всё так и есть. Поскольку это не темы, а ссылки на перенесенные темы. Их "жизнь" в данном форуме как-бы замерзает. Их функция - временный указатель нового расположения темы.
В новом форуме (там, куда они перенесены) они нормально "живут". А в старом остаются на привычном (для пользователей, которые ими интересуются) месте, пока их не оттеснят в самый конец другие "живые" темы из старого форума.
В модераторском разделе есть специальный инструмент [ Удалить ссылку в старом форуме ]. Есть даже моды для автоматического удаления подобного рода ссылок спустя некоторое время.
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Slon77
phpBB 1.4.2
Сообщения: 52
Стаж: 20 лет 3 месяца
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Проблема с сортировкой перенесенных тем

Сообщение Slon77 »

Палыч, спасибо!

Не подскажите, "малой кровью" можно ли заставить сортировать при выдаче перенесенные темы наравне с обычными?
(просто модифицируя sql запрос в vieforum.php сделать это не получилось)
Правильно я понимаю, что сначала формируется массив $rowset (из обычных тем, прилепленных, перенесенных итд), который потом и участвует в выдаче?
Можно ли непосредственно перед выдачей этот массив отсортировать по какому-то полю?

Я за них (перенесенные темы) так цепляюсь, потому что была идея в 1 спец. подфоруме отображать ряд отобранных, "горячих" тем из других разделов. А физическое нахождение этих тем по разным разделам (географическим) привязано с отображением в календаре.

И еще, не подскажите "логику" по которой 1 перенесенная тема оказывается выше другой?
Зависит от времени появления самой ссылки на тему?

Еще раз спасибо!

Добавлено спустя 9 минут 29 секунд:
Появляется подозрение, что за идею непрофильного использования ссылок на перенесенные темы я ухватился зря, а нужно искать какой-то мод по отображению выбранных сообщений в каком-то отдельно-взятом разделе. если такой есть - буду очень признателен за подсказку.
Slon77
phpBB 1.4.2
Сообщения: 52
Стаж: 20 лет 3 месяца
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Проблема с сортировкой перенесенных тем

Сообщение Slon77 »

Так и не смог решить задачу самостоятельно.
Буду благодарен за любые идеи.
Slon77
phpBB 1.4.2
Сообщения: 52
Стаж: 20 лет 3 месяца
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Проблема с сортировкой перенесенных тем

Сообщение Slon77 »

Похоже, малой кровью и с кавалерийского наскока задача не решается.

Пока такие мысли. Буду признателен за критику и комментарии.

В момент переноса темы (с поставленной галочкой "оставить ссылку") в таблице TOPICS создается еще одна запись, изначально - копия перенесенной.
Соответственно, любые изменения в исходной теме в "тени" (shadow) не отображаются.
"Живой" топик даже не знает, что у него есть тень.

События, которые могут повлиять на порядок выдачи тем внутри форума - добавление нового поста, удаление (последнего) поста, перенос поста из 1 ветки в другую (в любом направлении), поднятие темы (если оно не закрыто).

Наиболее универсальное решение, пришедшее на ум - сторонний скрипт, который бы отлавливал (в нужном подфоруме) тени перенесенных тем и копировал им из родительских тем значение topic_last_post_time. Скрипт можно положить в cron, и запускать, скажем, каждые 5 минут.

изначально думал насчет обойтись только средствами mysql, но так и не понял, возможно ли сие...
Ориентировочный пример скрипта:

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

$shadow_topic_list = array();
$shadow_topic_newtime = array();
//ищем в определенном форуме (WHERE t.forum_id =x, где x заменить на свое значение или совсем убрать) "тени" перенесенных тем
$sql = "SELECT t.topic_id, t.topic_moved_id FROM " . TOPICS_TABLE . " t 
WHERE t.forum_id =x 
AND t.topic_status =2";
$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
	{
$shadow_topic_list[$row['topic_moved_id']] = $row['topic_id'];
       }
$db->sql_freeresult($result);

//получаем оригинальное значение topic_last_post_time перенесенных тем
$sql = 'SELECT t.topic_id, t.topic_last_post_time 
		FROM ' . TOPICS_TABLE . ' t 
		WHERE ' . $db->sql_in_set('topic_id', array_keys($shadow_topic_list));
$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
	{
$shadow_topic_newtime[$row['topic_id']] = $row['topic_last_post_time'];
       }
$db->sql_freeresult($result);

//обновляем значение topic_last_post_time
foreach ($shadow_topic_list as $shadow_moved_id => $shadow_id)
{
$sql = 'UPDATE ' . TOPICS_TABLE . "
 SET topic_last_post_time = " . $shadow_topic_newtime[$shadow_moved_id] . "
 WHERE topic_id = " . $shadow_id;
$db->sql_query($sql);
}
минус такого решения - пользователь, добавив пост, не увидит сразу изменения позиции своей ветки в определенном разделе (там где отображаются "тени")

можно приделать еще один костыль:

в файле posting.php внутри блока "if ($submit) ...." добавить что-то вроде:

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

//проверка на значение $mode - чтобы время не изменялось при редактировании поста
if ($mode == 'reply' || $mode == 'quote') {
$shadow_topic_list = array();
$sql = "SELECT t.topic_id, t.topic_moved_id FROM " . TOPICS_TABLE . " t 
WHERE t.forum_id =x 
AND t.topic_status =2";
$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
	{
$shadow_topic_list[$row['topic_moved_id']] = $row['topic_id'];
       }
$db->sql_freeresult($result);

if (isset($shadow_topic_list[$topic_id])) {
				$sql = 'UPDATE ' . TOPICS_TABLE . "
					SET topic_last_post_time = " . $current_time . "
					WHERE topic_id = " . $shadow_topic_list[$topic_id];
				$db->sql_query($sql);
 }
}
ну вот, как-то так..

теперь пойду думать, как сделать так. чтобы в этих "тенях" отображались непрочитанные сообщения..
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Проблема с сортировкой перенесенных тем

Сообщение Палыч »

Slon77
А зачем всё это?
К чему плодить клонов?
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Slon77
phpBB 1.4.2
Сообщения: 52
Стаж: 20 лет 3 месяца
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Проблема с сортировкой перенесенных тем

Сообщение Slon77 »

У нас на Форуме исторически повелось, что был раздел Афиша, куда писали о различных мероприятиях - семинары, концерты, фестивали итд..
этот раздел был самым посещаемым.
со временем в 1 разделе информация перестала "умещаться" - развели ее по разным подфорумам.
мероприятий много, для каждого свой раздел.
Форум посвящен танго, в базе есть информация о большом кол-ве фестивалей в разных городах/странах.
Для удобства поиска информация была структурирована
- "географически" - каждой стране - свой подфорум http://forum.gotango.ru/planeta-tango/
-по времени - через календарь - http://forum.gotango.ru/tango-festivals.php

Но информации много, зачастую народ ленится читать все. Кто-то ленится разбираться.
Раздел Афиша перевели в разряд "рекомендованные мероприятия". Допустим, всего фестивалей 100, а тех, которые напрямую касаются 90% посетителей - 10. Их хотелось отобразить отдельно, в наиболее посещаемом разделе.
Цель - собрать вместе, предоставить вниманию посетителей ряд топиков со значимыми мероприятиями.
Встал выбор, или от лица администрации писать новые топики, где размещать свою рекомендацию и линк на ветку рекомендуемого события, или - попробовать использовать перенесенные темы. (точнее, стали использовать перенесенные темы, и только потом обнаружили, что у них проблема с сортировкой. стал исправлять..)
Вот, как-то так..

Вернуться в «Поддержка phpBB 3.0.х»