У меня сделан самописный раздел (что-то типа Мода), в котором по принципу сообщений в форуме, но в более простой форме комментариев пользователи постят сообщения.
В связи с тем, что сообщений стало много, они попросили сделать также как и на форуме, т.е. чтоб были иконки "непрочтенное сообщение".
Отдельно страничку с сообщениями с последнего посещения сделать не вижу труда - сравнивая время сообщения и время последнего входа.
Так же можно сделать и значок у самого сообщения (оранжевый например, как на форуме).
Но, не пойму принцип, как это завязано с куками и кешированием? (увидел строчки при просмотре Viewtopic.php)
Хочется сделать чтобы после просмотра сообщения, перелистнув страницу, и потом к ней вернувшись, пользователь уже видел что сообщение прочитано. При условии что кол-во выводимых сообщений в pagination выставляется пользователем в Личном разделе самостоятельно.
Естественно создал новую таблицу comment_tracking, но никак не могу понять как связать это с текущей сессией.
Кому несложно, и кто понимает принцип работы этого функционала - подскажите.
Принцип работы Unread - требуется помощь.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
Принцип работы Unread - требуется помощь.
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
-
Nekstati
- Поддержка

- Сообщения: 3365
- Стаж: 17 лет 6 месяцев
- Благодарил (а): 37 раз
- Поблагодарили: 1454 раза
Re: Принцип работы Unread - требуется помощь.
Боюсь, вам придётся писать новую функцию get_comment_tracking() по аналогии с get_topic_tracking() и переделывать функцию markread() для работы с вашей таблицей comment_tracking. Проще будет переписать свой мод так, чтобы эта ваша страничка обрабатывалась как обычная тема, только оформлялась по-другому.
Когда в обычной теме вы видите красные значки непрочитанных сообщений, логика примерно такая:
Далее, юзер зашёл в тему, прочёл сообщения — активируктся функция markread() и ставит новую временную метку в topics_track_table.
Когда в обычной теме вы видите красные значки непрочитанных сообщений, логика примерно такая:
Код: Выделить всё
Функция get_topic_tracking():
взять временную метку для данного юзера и данного топика из topics_track_table
если её нет, то
взять временную метку для данного юзера и данного форума из forums_track_table
если её нет, то
взять временную метку для данного юзера из users_table
Затем в viewtopic.php:
если функция get_topic_tracking() вернула временную метку
и если post_time > этой временной метки
даём красный значок
иначе серыйПро куки забудьте, если у вас в админке включена маркировка тем на сервере.Но, не пойму принцип, как это завязано с куками
Re: Принцип работы Unread - требуется помощь.
Да примерно так я и подумал с временными метками.
Но как быть с очисткой таблицы с этими метками? Не оставлять же их навечно? Эдак таблица разрастется очень быстро и до очень приличных размеров.
Каждый раз делать запрос на последний вход, и при условии, что дата входа более поздняя, удалять для пользователя метки?
Но получается что этот запрос нужно прикрепить в Функцию Хидера.... А это лишний запрос при каждой загрузке страницы.
Но как быть с очисткой таблицы с этими метками? Не оставлять же их навечно? Эдак таблица разрастется очень быстро и до очень приличных размеров.
Каждый раз делать запрос на последний вход, и при условии, что дата входа более поздняя, удалять для пользователя метки?
Но получается что этот запрос нужно прикрепить в Функцию Хидера.... А это лишний запрос при каждой загрузке страницы.
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
-
rxu
- phpBB Guru

- Сообщения: 17272
- Стаж: 20 лет 4 месяца
- Откуда: Красноярск
- Благодарил (а): 632 раза
- Поблагодарили: 2412 раз
Re: Принцип работы Unread - требуется помощь.
Всё немного сложнее. Если в теме не остается непрочитанных сообщений, запись из таблицы для неё и этого пользователя удаляется.velo писал(а):Но как быть с очисткой таблицы с этими метками?
Если в форуме не остается непрочитанных тем, запись для него и этого пользователя удаляется.
Re: Принцип работы Unread - требуется помощь.
А как определить что не осталось непрочитанных?
Если в запросе при просмотре темы например со 130 сообщениями из которых 28 не просмотренных, просматривается последняя (13-я, при условии что по 10 сообщений вывод) т.е. $start=12.
Значит SQL запрос вывода лимитирован именно 10-ю последними сообщениями, сообщения на 12 и ранее страницах остаются без метки.
В следующий раз, предположим пользователь открыл все страницы с непросмотренными, но кроме последней. По факту как бы все сообщения просмотрены пользователем.
Как же тогда определится что в этой теме все сообщения просмотрены? Нужно каждый раз прогонять ещё один запрос без LIMIT ? Чтобы проверить все сообщения в этой теме?
Если в запросе при просмотре темы например со 130 сообщениями из которых 28 не просмотренных, просматривается последняя (13-я, при условии что по 10 сообщений вывод) т.е. $start=12.
Значит SQL запрос вывода лимитирован именно 10-ю последними сообщениями, сообщения на 12 и ранее страницах остаются без метки.
В следующий раз, предположим пользователь открыл все страницы с непросмотренными, но кроме последней. По факту как бы все сообщения просмотрены пользователем.
Как же тогда определится что в этой теме все сообщения просмотрены? Нужно каждый раз прогонять ещё один запрос без LIMIT ? Чтобы проверить все сообщения в этой теме?
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
-
Nekstati
- Поддержка

- Сообщения: 3365
- Стаж: 17 лет 6 месяцев
- Благодарил (а): 37 раз
- Поблагодарили: 1454 раза
Re: Принцип работы Unread - требуется помощь.
В порядке оффтопика. Вот бы как я сделала подобный раздел, если бы была необходимость.
1. Создаём новый форум, запрещаем юзерам видеть его, но не запрещаем писать в нём. Он отсутствует в списке форумов, но доступен по прямой ссылке.
2. Копируем viewtopic.php, переименовываем в mypage.php, в первых строках вместо request_var жёстко указываем ID форума, в последних строках изменяем название шаблона на mypage_body.html. Правим генерацию ссылок, чтобы вместо viewtopic везде было mypage. Ну и добавляем какие-то особые функции, нужные нам.
3. Создаём mypage_body.html на основе viewtopic_body.html, упрощаем и переделываем по вкусу.
4. В начало viewtopic.php вставляем редирект, чтобы юзер после отправки поста возвращался куда положено:
5. Проделываем аналогичные надругательства над копией viewforum.php, называем её мой_раздел.php.
И усё, в нашем эксклюзивном разделе работают все функции: права, маркировка, подписка, модераторство, правка, жалобы и т.п., и не надо изобретать велосипед.
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" : '')));
}И усё, в нашем эксклюзивном разделе работают все функции: права, маркировка, подписка, модераторство, правка, жалобы и т.п., и не надо изобретать велосипед.
Re: Принцип работы Unread - требуется помощь.
Наверно это возможно (не вдавался в подробности), при создании нового раздела.
Однако всё это уже существует несколько лет, и имеет все вышеперечисленные функции, кроме жалоб (они не нужны) и отметки прочитано - не прочитано.
Чтоб было понятнее, вот пример: http://www.velocat.ru/velo/phpBB3/pokat ... =20#bottom
Сделал отметки для непрочитанных с последнего посещения, и сделал страницу с "новыми комментариями".
Теперь всё таки буду копать в сторону tracking - a
Однако всё это уже существует несколько лет, и имеет все вышеперечисленные функции, кроме жалоб (они не нужны) и отметки прочитано - не прочитано.
Чтоб было понятнее, вот пример: 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.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
-
rxu
- phpBB Guru

- Сообщения: 17272
- Стаж: 20 лет 4 месяца
- Откуда: Красноярск
- Благодарил (а): 632 раза
- Поблагодарили: 2412 раз
Re: Принцип работы Unread - требуется помощь.
Для примера, посмотрите get_unread_topics в includes/functions.php от версии 3.0.6.velo писал(а):А как определить что не осталось непрочитанных?

