...хотя это не делает менее бестолковой
Но так уж исторически сложилось.
При раскрытии сообщения его дата сравнивается с меткой в куках. Если метка более ранняя, то она заменяется на дату раскрытого сообщения. С этого момента, все сообщения раньше этой даты считаются прочитанными.
То есть если начать читать форум с конца (с самого свежего сообщения), то весь форум окажется отмечен прочитанным.
Если понимать эту схему, то получается достаточно удобно. Вопрос в том, как сделать удобно и для тех, кто ее не понимает?
RE: как сделать удобно и для тех, кто ее не понимает?
Дим(м)
08/08/2016 17:13
#
Например, хранить отдельную метку для каждой темы форума, а не одну на весь форум.
Да, со временем их число будет увеличиваться. Но на этот случай можно придумать какой-то механизм очистки. Например, при загрузке форума удалять из куков все метки старше 12 месяцев. (и, соответственно, все темы старше 12 месяцев никогда не показывать как непрочитанные)
Но проблема у "топик-стартера", как я понял, не в незнании "схемы", а в том, что статус прочитанности изменяется при нажатии Back.
По идее, браузер ведь должен был закэшировать страницу и при нажатии Back - просто показать её "как было". Но то ли кэширование не работает, как должно, то ли функция, выделяющая непрочитанные темы, вызывается в т.ч. и при нажатии Back. А раньше ("до появления Win10 у latan"), судя по всему, этого не происходило.
Разумно
Loki
09/08/2016 12:33
#
Переделал механизм в соответствии с вышеизложенной логикой. Теперь в пределах полугода каждая тема отслеживается отдельно.
Что касается самой темы, то мне представляется маловероятным, чтобы все браузеры меняли свое поведение в новой ОС. Скорее тут дело в чем-то другом.
Теперь все темы отображаются как не прочитанные. :rage:
Такие новации следует вводить совместно с кнопкой "Отметить все темы как прочитанные" и никак иначе.
добавил кнопку на главной форума (-)
Loki
09/08/2016 16:09
#
Для обратной совместимости стоит ...
Дим(м)
09/08/2016 14:45
#
... использовать старое (глобальное) значение маркера, если индивидуальный маркер для проверяемой темы отсутствует.
Что-то типа такого:
var topicTS = getLastViewTimestampForTopic(currTopic);
if (!topicTS) {
topicTS = getForumLastViewTimestamp();
if (currTopic.lastModified > now - 6 month) {
saveLastViewTimestampForTopic(currTopic, topicTS);
}
}
if (topicTS && currTopic.lastModified > topicTS) {
markAsUnread(currTopic);
}
Теперь, вроде бы, нормально
latan
15/08/2016 01:41
#
Понаблюдаю ещё.