Как показать непрочитанные подфорумы? - PullRequest
0 голосов
/ 18 февраля 2010

Я написал простой форум на PHP с использованием PostgreSQL. Форум состоит из нескольких подфорумов (или категорий, если хотите), которые содержат темы. У меня есть таблица, в которой хранится информация о том, когда пользователь последний раз посещал тему. Это примерно так: user_id, topic_id, timestamp.

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

Мой вопрос: как мне эффективно определить, какие подфорумы (категории) следует пометить как непрочитанные? Все, что я придумал, это следующее: каждый раз, когда пользователь посещает тему, обновляет временную метку посещения и проверяет, прочитаны ли все темы из текущего подфорума или нет. Если они все прочитаны, пометьте подфорум как прочитанный для пользователя. Иначе, отметьте это как непрочитанное. Но я думаю, что должен быть другой путь.

Заранее спасибо.

1 Ответ

1 голос
/ 18 февраля 2010

Есть много способов (как и ваш) для достижения подобного поведения, так как вы упомянули эффективность, я считаю, что производительность важна.

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

  1. При первом посещении пометьте только темы более новые, чем, скажем, 3 дня, как "непрочитанные"
  2. Когда пользователь просматривает темы, начните выбрасывать идентификаторы тем и LastUpdate для потока в файл cookie на клиенте
  3. Когда страницы форума загружаются, проверьте файл cookie и, если у потока возникли какие-либо обновления, этот код, а также обработку файла cookie можно легко выполнить с помощью pure javascript .
  4. Если клиент целую неделю находится вне веб-сайта, нет проблем, он увидит все, что не прошло 3 дня (правило первого посещения), как непрочитанные.

с .: Это на 100% связано с тем, насколько важно для человека знать, что он не прочитал. По моему предложению это не является чем-то важным, потому что это не на 100% надежно (мы не используем базу данных / правильное постоянство в конце концов)

...