Описание проблемы: Проблема с сортировкой перенесенных тем
Произведенные изменения, после которых начались неполадки: переход с 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 результата не дало).
Просьба помочь разобраться с проблемой сортировки перенесенных тем.
Спасибо!
Проблема с сортировкой перенесенных тем
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
владимир1983
- phpBB 3.2.6
- Сообщения: 5954
- Стаж: 16 лет 4 месяца
- Откуда: Сергиев Посад
- Благодарил (а): 373 раза
- Поблагодарили: 727 раз
Re: Проблема с сортировкой перенесенных тем
Slon77, покажите на примере неправильную сортировку тем.
За ваши деньги решу ваши проблемы. Стучи в ЛС.
Нет человека - нет проблемы. (c)
Нет человека - нет проблемы. (c)
Re: Проблема с сортировкой перенесенных тем
Верхние 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
и другие перенесенные темы.
Если в какую-то тему написать новое сообщение, порядок отображения не изменится.
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 только на форумах. По найму не работаю.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Re: Проблема с сортировкой перенесенных тем
Палыч, спасибо!
Не подскажите, "малой кровью" можно ли заставить сортировать при выдаче перенесенные темы наравне с обычными?
(просто модифицируя sql запрос в vieforum.php сделать это не получилось)
Правильно я понимаю, что сначала формируется массив $rowset (из обычных тем, прилепленных, перенесенных итд), который потом и участвует в выдаче?
Можно ли непосредственно перед выдачей этот массив отсортировать по какому-то полю?
Я за них (перенесенные темы) так цепляюсь, потому что была идея в 1 спец. подфоруме отображать ряд отобранных, "горячих" тем из других разделов. А физическое нахождение этих тем по разным разделам (географическим) привязано с отображением в календаре.
И еще, не подскажите "логику" по которой 1 перенесенная тема оказывается выше другой?
Зависит от времени появления самой ссылки на тему?
Еще раз спасибо!
Добавлено спустя 9 минут 29 секунд:
Появляется подозрение, что за идею непрофильного использования ссылок на перенесенные темы я ухватился зря, а нужно искать какой-то мод по отображению выбранных сообщений в каком-то отдельно-взятом разделе. если такой есть - буду очень признателен за подсказку.
Не подскажите, "малой кровью" можно ли заставить сортировать при выдаче перенесенные темы наравне с обычными?
(просто модифицируя sql запрос в vieforum.php сделать это не получилось)
Правильно я понимаю, что сначала формируется массив $rowset (из обычных тем, прилепленных, перенесенных итд), который потом и участвует в выдаче?
Можно ли непосредственно перед выдачей этот массив отсортировать по какому-то полю?
Я за них (перенесенные темы) так цепляюсь, потому что была идея в 1 спец. подфоруме отображать ряд отобранных, "горячих" тем из других разделов. А физическое нахождение этих тем по разным разделам (географическим) привязано с отображением в календаре.
И еще, не подскажите "логику" по которой 1 перенесенная тема оказывается выше другой?
Зависит от времени появления самой ссылки на тему?
Еще раз спасибо!
Добавлено спустя 9 минут 29 секунд:
Появляется подозрение, что за идею непрофильного использования ссылок на перенесенные темы я ухватился зря, а нужно искать какой-то мод по отображению выбранных сообщений в каком-то отдельно-взятом разделе. если такой есть - буду очень признателен за подсказку.
Re: Проблема с сортировкой перенесенных тем
Так и не смог решить задачу самостоятельно.
Буду благодарен за любые идеи.
Буду благодарен за любые идеи.
Re: Проблема с сортировкой перенесенных тем
Похоже, малой кровью и с кавалерийского наскока задача не решается.
Пока такие мысли. Буду признателен за критику и комментарии.
В момент переноса темы (с поставленной галочкой "оставить ссылку") в таблице TOPICS создается еще одна запись, изначально - копия перенесенной.
Соответственно, любые изменения в исходной теме в "тени" (shadow) не отображаются.
"Живой" топик даже не знает, что у него есть тень.
События, которые могут повлиять на порядок выдачи тем внутри форума - добавление нового поста, удаление (последнего) поста, перенос поста из 1 ветки в другую (в любом направлении), поднятие темы (если оно не закрыто).
Наиболее универсальное решение, пришедшее на ум - сторонний скрипт, который бы отлавливал (в нужном подфоруме) тени перенесенных тем и копировал им из родительских тем значение topic_last_post_time. Скрипт можно положить в cron, и запускать, скажем, каждые 5 минут.
изначально думал насчет обойтись только средствами mysql, но так и не понял, возможно ли сие...
Ориентировочный пример скрипта:
минус такого решения - пользователь, добавив пост, не увидит сразу изменения позиции своей ветки в определенном разделе (там где отображаются "тени")
можно приделать еще один костыль:
в файле posting.php внутри блока "if ($submit) ...." добавить что-то вроде:
ну вот, как-то так..
теперь пойду думать, как сделать так. чтобы в этих "тенях" отображались непрочитанные сообщения..
Пока такие мысли. Буду признателен за критику и комментарии.
В момент переноса темы (с поставленной галочкой "оставить ссылку") в таблице 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 только на форумах. По найму не работаю.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Re: Проблема с сортировкой перенесенных тем
У нас на Форуме исторически повелось, что был раздел Афиша, куда писали о различных мероприятиях - семинары, концерты, фестивали итд..
этот раздел был самым посещаемым.
со временем в 1 разделе информация перестала "умещаться" - развели ее по разным подфорумам.
мероприятий много, для каждого свой раздел.
Форум посвящен танго, в базе есть информация о большом кол-ве фестивалей в разных городах/странах.
Для удобства поиска информация была структурирована
- "географически" - каждой стране - свой подфорум http://forum.gotango.ru/planeta-tango/
-по времени - через календарь - http://forum.gotango.ru/tango-festivals.php
Но информации много, зачастую народ ленится читать все. Кто-то ленится разбираться.
Раздел Афиша перевели в разряд "рекомендованные мероприятия". Допустим, всего фестивалей 100, а тех, которые напрямую касаются 90% посетителей - 10. Их хотелось отобразить отдельно, в наиболее посещаемом разделе.
Цель - собрать вместе, предоставить вниманию посетителей ряд топиков со значимыми мероприятиями.
Встал выбор, или от лица администрации писать новые топики, где размещать свою рекомендацию и линк на ветку рекомендуемого события, или - попробовать использовать перенесенные темы. (точнее, стали использовать перенесенные темы, и только потом обнаружили, что у них проблема с сортировкой. стал исправлять..)
Вот, как-то так..
этот раздел был самым посещаемым.
со временем в 1 разделе информация перестала "умещаться" - развели ее по разным подфорумам.
мероприятий много, для каждого свой раздел.
Форум посвящен танго, в базе есть информация о большом кол-ве фестивалей в разных городах/странах.
Для удобства поиска информация была структурирована
- "географически" - каждой стране - свой подфорум http://forum.gotango.ru/planeta-tango/
-по времени - через календарь - http://forum.gotango.ru/tango-festivals.php
Но информации много, зачастую народ ленится читать все. Кто-то ленится разбираться.
Раздел Афиша перевели в разряд "рекомендованные мероприятия". Допустим, всего фестивалей 100, а тех, которые напрямую касаются 90% посетителей - 10. Их хотелось отобразить отдельно, в наиболее посещаемом разделе.
Цель - собрать вместе, предоставить вниманию посетителей ряд топиков со значимыми мероприятиями.
Встал выбор, или от лица администрации писать новые топики, где размещать свою рекомендацию и линк на ветку рекомендуемого события, или - попробовать использовать перенесенные темы. (точнее, стали использовать перенесенные темы, и только потом обнаружили, что у них проблема с сортировкой. стал исправлять..)
Вот, как-то так..

