Как работает система «пометить как прочитанную» в веб-форумах? - PullRequest
2 голосов
/ 11 марта 2009

Я задавался вопросом об этом в течение некоторого времени. Мне интересно, чтобы в веб-форумах была возможность выделить то, что вы еще не прочитали. Как форум знает.

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

Но это не объясняет, как отдельные темы по-прежнему выделяются после прочтения только одной.

Ответы [ 7 ]

3 голосов
/ 11 марта 2009

Таблица «многие ко многим», соединяющая пользователя с темой / сообщением с флагами для чтения / избранных и т. Д.

2 голосов
/ 11 марта 2009

Многие веб-форумы хранят огромный список тех случаев, когда вы просматривали каждую тему в последний раз.

Это быстро выходит из-под контроля, но есть смягчения. См. Определение непрочитанных предметов на форуме

1 голос
/ 12 марта 2009

Отслеживание того, какие посты прочитал посетитель, конечно, не так уж важно. Поскольку весьма вероятно, что количество прочитанных постов будет намного меньше, чем постов, не прочитанных. Таким образом, если вы знаете, какие сообщения посетитель прочитал, вы также знаете, какие сообщения этот пользователь не читал. Чтобы сделать это менее интенсивным в вычислительном отношении, вы обычно делаете это только в течение определенного периода времени, скажем, в последние две недели. Все до этого времени будет считаться прочитанным.

1 голос
/ 11 марта 2009

На пользовательском форуме, с которым я работал, мы использовали комбинацию времени вашего последнего посещения (обновлялось каждый раз, когда вы просматривали другую страницу - обычно готовую) и кнопку «пометить чтение» в каждой теме, в которую добавлялась дата значение времени для таблицы SQL, содержащей ваш UserID, TopicID и дату / время.

Таким образом, для просмотра новых тем мы будем рассматривать дату вашего последнего посещения, а все, что было создано после этого момента, было новой темой.

После того, как вы ввели тему, любая тема, на которую вы нажали «отметить прочитанное», будет показывать только начальную тему, а затем любые ответы с добавленной датой / временем после нажатия кнопки «Отметить прочитанное». Если у вас меньше зрителей и нехватка производительности, вы можете настроить ее так, чтобы добавить запись в таблицу для каждой темы, по которой щелкает пользователь, когда он щелкает по ней.

1 голос
/ 11 марта 2009

Обычно этот список «непрочитанных» элементов показывает только изменения, которые были сделаны с момента последнего выхода из системы.

Используйте дату / время последнего действия пользователя, чтобы пометить элементы как «непрочитанные» (любое действие в теме после этого времени помечается как «непрочитанное»). Затем сохраните в переменной Session список идентификаторов тем, которые пользователь просматривал с момента последнего входа в систему. Сочетание этих двух даст вам относительно точный список непрочитанных тем.

Конечно, эти данные будут потеряны при выходе из системы или по истечении сеанса, и цикл начнется снова, не жертвуя ненужным количеством SQL-запросов.

0 голосов
/ 12 марта 2009

Еще один подход:

  • Убедитесь, что ваша таблица стилей показывает четкую разницу между посещенными и не посещенными ссылками, используя тот факт, что браузеры постоянно запоминают посещенные страницы.

Однако, чтобы это работало, вам нужно иметь согласованные URL-адреса для тем, и большинство систем форумов обычно этого не делают. Еще одним недостатком является то, что пользователи могут очистить свою историю или использовать более одного браузера. Следовательно, это помещает эту меру в «не очень надежную категорию»; Вы, вероятно, просто сделаете это, чтобы увеличить любые другие меры, которые вы используете для отслеживания просматриваемых тем.

0 голосов
/ 12 марта 2009

Другой вариант, который у вас есть, и я уже видел, как это делалось ранее при установке vBulletin, - это сохранение разделенного запятыми списка просматриваемых идентификаторов тем на стороне клиента в файле cookie.

На стороне сервера, единственное, что было сохранено, это время предыдущего посещения пользователя. Система форума использовала это в сочетании с информацией в куки пользователя, чтобы показать «как прочитанное» для любой темы, где либо

  • Дата последнего изменения (т. Е. Последнее сообщение) старше, чем предыдущий визит пользователя
  • Идентификатор темы, найденный в файле cookie пользователя, как тема, которую пользователь посетил в этом сеансе.

Я не говорю, что это хорошая идея , но я подумал, что упомяну это как альтернативу - очевидный способ сделать это уже был указан в других ответах, т.е. хранить его на сервере сторона как таблица отношений (таблица «многие ко многим»).

Полагаю, преимущество заключается в том, что сервер хранит эту информацию меньше нагрузки.

Недостатком является то, что он связывает его с сеансом, поэтому после запуска нового сеанса все, что произошло до последнего сеанса, считается «уже прочитанным». Другим недостатком является то, что cookie может содержать только столько информации, и пользователь может просматривать сотни тем в сеансе, поэтому он приближается к пределу хранения cookie.

...