DJZT
@DJZT
Laravel - code for you

Как хранить состояния просмотра лейблы «new» пользователем?

На сайтах видел что при добавлении контента висит лейбл "new", если пользователь его ещё не видел. Как осуществялется хранение состояния о том, что текущий пользователь видел или нет, данный контент?
Вариант, записывать в БД, кто открывал статью - не катит. Контент в таблице. То есть при обновлении страницы, метки должны пропасть.
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ответы на вопрос 4
difiso
@difiso
В параллельной вселенной я космонавт
Заведите отдельную NoSQL базу, и туда пишите связку user_id-item_id. Если записи нет, то метка на странице ставится, при этом записывается эта самая связка (тогда при обновлении эта пара уже будет в базе и метка автоматом не поставится). Если вы используете ORM, то они помогут вам без особой писанины, если не пользуетесь, то придется все конечно писать самому.

Можно еще добавить поле со временем просмотра в NoSql, то можно будет по расписанию вычищать базу от ненужных записей. Если добавить и "длительность новизны" в MySQL, то будет возможность игнорировать проверку на просмотр.

ИМХО, для простого рода логирования NoSQL подходит очень даже хорошо.
Ответ написан
Комментировать
w999d
@w999d
Web-developer
Один из вариантов - записывать время "последнего захода на сайт" для пользователей, и помечать контент свежее этой даты.
Обновления страниц, к примеру, через промежуток менее 5-10 минут не считать за новый заход.
А просмотренный контент писать в сессию или другое временное хранилище, которое сбрасывать при смене даты.

В последнем пункте, есть единственный изъян - это то, что предполагается, что на сайт заходит человек, а не бот.
Чтобы избежать переполнения в случае непрерывного посещения - можно дополнительно сбрасывать по достижению фиксированного размера - из пользователей это мало кого затронет.
Ответ написан
@Centrino
Как уже писали выше, можете использовать NoSql. И если у вас есть база статей, база пользователей, просто добавляете коллекцию user_id -> [items_id]. При создании статьи, ее идентификатор помещается всем пользователям в данную коллекцию и считается, что пользователь ее не читал. Клиент заходит на сайт, вы делаете выборку статей из колекции, которые не читал пользователь, и помечаете выбранные статьи как новые. Если пользователь зашел на нее, то вы просто удаляете ее из списка.
Можете сделать систему бейджей - тегов (тематика статей) и присваивать ее пользователям, которые подписались на определенный вид тематики. И в дальнейшем создавать статьи с определенными бейджами и добавлять ее только тем пользователям, у которых есть один из бейджей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы