Пропустить

Принцип работы Unread - требуется помощь.

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Принцип работы Unread - требуется помощь.

Сообщение velo » 13.02.2010 0:10

У меня сделан самописный раздел (что-то типа Мода), в котором по принципу сообщений в форуме, но в более простой форме комментариев пользователи постят сообщения.

В связи с тем, что сообщений стало много, они попросили сделать также как и на форуме, т.е. чтоб были иконки "непрочтенное сообщение".

Отдельно страничку с сообщениями с последнего посещения сделать не вижу труда - сравнивая время сообщения и время последнего входа.

Так же можно сделать и значок у самого сообщения (оранжевый например, как на форуме).
Но, не пойму принцип, как это завязано с куками и кешированием? (увидел строчки при просмотре Viewtopic.php)

Хочется сделать чтобы после просмотра сообщения, перелистнув страницу, и потом к ней вернувшись, пользователь уже видел что сообщение прочитано. При условии что кол-во выводимых сообщений в pagination выставляется пользователем в Личном разделе самостоятельно.

Естественно создал новую таблицу comment_tracking, но никак не могу понять как связать это с текущей сессией.
Кому несложно, и кто понимает принцип работы этого функционала - подскажите.
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.2.6-1+lenny9, Apache/2.2.9 (Debian), MySQL 5.0.51a

velo
phpBB 2.0.6
 
Сообщения: 252
Зарегистрирован: 14.09.2007 19:06
Благодарил (а): 9 раз.
Поблагодарили: 27 раз.

Re: Принцип работы Unread - требуется помощь.

Сообщение Nekstati » 13.02.2010 17:33

Боюсь, вам придётся писать новую функцию get_comment_tracking() по аналогии с get_topic_tracking() и переделывать функцию markread() для работы с вашей таблицей comment_tracking. Проще будет переписать свой мод так, чтобы эта ваша страничка обрабатывалась как обычная тема, только оформлялась по-другому.

Когда в обычной теме вы видите красные значки непрочитанных сообщений, логика примерно такая:
Функция get_topic_tracking():

взять временную метку для данного юзера и данного топика из topics_track_table
если её нет, то
взять временную метку для данного юзера и данного форума из forums_track_table
если её нет, то
взять временную метку для данного юзера из users_table

Затем в viewtopic.php:

если функция get_topic_tracking() вернула временную метку
	и если post_time > этой временной метки
даём красный значок
иначе серый

Далее, юзер зашёл в тему, прочёл сообщения — активируктся функция markread() и ставит новую временную метку в topics_track_table.
Но, не пойму принцип, как это завязано с куками

Про куки забудьте, если у вас в админке включена маркировка тем на сервере.
Аватара пользователя
Nekstati
Лидер поддержки
Лидер поддержки
 
Сообщения: 2181
Зарегистрирован: 19.03.2009 17:43
Благодарил (а): 6 раз.
Поблагодарили: 607 раз.

Re: Принцип работы Unread - требуется помощь.

Сообщение velo » 13.02.2010 17:39

Да примерно так я и подумал с временными метками.

Но как быть с очисткой таблицы с этими метками? Не оставлять же их навечно? Эдак таблица разрастется очень быстро и до очень приличных размеров.

Каждый раз делать запрос на последний вход, и при условии, что дата входа более поздняя, удалять для пользователя метки?
Но получается что этот запрос нужно прикрепить в Функцию Хидера.... А это лишний запрос при каждой загрузке страницы. :?
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.2.6-1+lenny9, Apache/2.2.9 (Debian), MySQL 5.0.51a

velo
phpBB 2.0.6
 
Сообщения: 252
Зарегистрирован: 14.09.2007 19:06
Благодарил (а): 9 раз.
Поблагодарили: 27 раз.

Re: Принцип работы Unread - требуется помощь.

Сообщение rxu » 13.02.2010 19:14

velo писал(а):Но как быть с очисткой таблицы с этими метками?

Всё немного сложнее. Если в теме не остается непрочитанных сообщений, запись из таблицы для неё и этого пользователя удаляется.
Если в форуме не остается непрочитанных тем, запись для него и этого пользователя удаляется.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7314
Зарегистрирован: 12.05.2006 17:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 251 раз.

Re: Принцип работы Unread - требуется помощь.

Сообщение velo » 13.02.2010 20:04

А как определить что не осталось непрочитанных?

Если в запросе при просмотре темы например со 130 сообщениями из которых 28 не просмотренных, просматривается последняя (13-я, при условии что по 10 сообщений вывод) т.е. $start=12.
Значит SQL запрос вывода лимитирован именно 10-ю последними сообщениями, сообщения на 12 и ранее страницах остаются без метки.

В следующий раз, предположим пользователь открыл все страницы с непросмотренными, но кроме последней. По факту как бы все сообщения просмотрены пользователем.
Как же тогда определится что в этой теме все сообщения просмотрены? Нужно каждый раз прогонять ещё один запрос без LIMIT ? Чтобы проверить все сообщения в этой теме?
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.2.6-1+lenny9, Apache/2.2.9 (Debian), MySQL 5.0.51a

velo
phpBB 2.0.6
 
Сообщения: 252
Зарегистрирован: 14.09.2007 19:06
Благодарил (а): 9 раз.
Поблагодарили: 27 раз.

Re: Принцип работы Unread - требуется помощь.

Сообщение Nekstati » 14.02.2010 0:49

В порядке оффтопика. Вот бы как я сделала подобный раздел, если бы была необходимость.

1. Создаём новый форум, запрещаем юзерам видеть его, но не запрещаем писать в нём. Он отсутствует в списке форумов, но доступен по прямой ссылке.

2. Копируем viewtopic.php, переименовываем в mypage.php, в первых строках вместо request_var жёстко указываем ID форума, в последних строках изменяем название шаблона на mypage_body.html. Правим генерацию ссылок, чтобы вместо viewtopic везде было mypage. Ну и добавляем какие-то особые функции, нужные нам.

3. Создаём mypage_body.html на основе viewtopic_body.html, упрощаем и переделываем по вкусу.

4. В начало viewtopic.php вставляем редирект, чтобы юзер после отправки поста возвращался куда положено:

if ($forum_id == 123)
{
	redirect(append_sid("{$phpbb_root_path}mypage.$phpEx", "t=$topic_id" . (($post_id) ? "&f=$post_id#p$post_id" : '')));
}


5. Проделываем аналогичные надругательства над копией viewforum.php, называем её мой_раздел.php.

И усё, в нашем эксклюзивном разделе работают все функции: права, маркировка, подписка, модераторство, правка, жалобы и т.п., и не надо изобретать велосипед.
Аватара пользователя
Nekstati
Лидер поддержки
Лидер поддержки
 
Сообщения: 2181
Зарегистрирован: 19.03.2009 17:43
Благодарил (а): 6 раз.
Поблагодарили: 607 раз.

Re: Принцип работы Unread - требуется помощь.

Сообщение velo » 14.02.2010 0:57

Наверно это возможно (не вдавался в подробности), при создании нового раздела.
Однако всё это уже существует несколько лет, и имеет все вышеперечисленные функции, кроме жалоб (они не нужны) и отметки прочитано - не прочитано.
Чтоб было понятнее, вот пример: http://www.velocat.ru/velo/phpBB3/pokat ... =20#bottom

Сделал отметки для непрочитанных с последнего посещения, и сделал страницу с "новыми комментариями".
Теперь всё таки буду копать в сторону tracking - a
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.2.6-1+lenny9, Apache/2.2.9 (Debian), MySQL 5.0.51a

velo
phpBB 2.0.6
 
Сообщения: 252
Зарегистрирован: 14.09.2007 19:06
Благодарил (а): 9 раз.
Поблагодарили: 27 раз.

Re: Принцип работы Unread - требуется помощь.

Сообщение rxu » 14.02.2010 5:49

velo писал(а):А как определить что не осталось непрочитанных?

Для примера, посмотрите get_unread_topics в includes/functions.php от версии 3.0.6.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7314
Зарегистрирован: 12.05.2006 17:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 251 раз.


Вернуться в Для авторов (phpBB 3.0.x)

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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

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

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы
cron