Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как организовать "новые сообщения"


Автор: shurup_312 26.9.2008, 16:53
И все таки ворачиваемся и ворачиваемся к теме как же все таки реализовать  на форуме "новые" и "прочитанные сообщения"? Ну народ, высказывайтесь, может кто-то такое делал, может кто-то готовый движок ковырл и видел как там это сделано? Просто очень нужно многим, а решения пока так я и не нашел и думаю многие так и не нашли.

Автор: Sunvas 26.9.2008, 17:12
А что тут трудного? У каждого сообщения есть своя дата публикации. Ты знаешь, когда пользователь зашел последний раз? - Да? - Вот и выбери из базы сообщения, с датой, большей, чем время последнего визита пользователя.

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

Автор: Sunvas 26.9.2008, 17:35
Тогда сделай, чтобы обновление даты последнего захода было не сразу, а через небольшую паузу. Во всяком случае именно это и есть ключевым моментом к решению проблемы.

Автор: ksnk 26.9.2008, 17:38
shurup_312, Очевидно, у юзера хранить даты последнего посещения тем форума. Тем у форума, как правило, не очень много, можно просто сериализованным массивом хранить. Если массив стал большим - обнуляем его и выставляем прочитанными ВСЕ сообщения с даты последнего посещения. Можно сложную базу организовать, но это, imho, геморой smile

Автор: Diabolus 27.9.2008, 02:09
Если сообщения - это топики, то новые - сверять ненешнее время (минус, скажем, сутки) со временем добавления сообщения.
Прочитано или нет - куки обычно.

Автор: shurup_312 27.9.2008, 05:35
Цитата(ksnk @ 26.9.2008,  17:38)
shurup_312, Очевидно, у юзера хранить даты последнего посещения тем форума. Тем у форума, как правило, не очень много, можно просто сериализованным массивом хранить. Если массив стал большим - обнуляем его и выставляем прочитанными ВСЕ сообщения с даты последнего посещения. Можно сложную базу организовать, но это, imho, геморой smile

вот это был бы хороший вариант если бы не одно но. У меня просто сайт с базой около 3000 пользователей. Вот я и думаю, если даже 1000 пользователей будет и 200 тем то это 200 тысяч записей. Это же ой как много... Хотя вариант допустимый в принципе.

Автор: ksnk 27.9.2008, 07:27
shurup_312, У каждого юзера есть таблица со статистикой - время последнего посещения, ets... Вот туда добавить поле - "прочитанные темы" типа Text. Добавится 1 запись для каждого юзера.
В это поле ложить массив вида
array('ТЕМА_ID'=>%LAST_TIME%, ...) записывать его с помошью serialize, unserialize. 

В принципе, такой массив можно хранить и в куках. Если юзер скачет с компа на комп - это может быть не очень удобно, но в принципе - нормльное решение, я 

Автор: SneG0K 27.9.2008, 08:59
Создай для сообщений отдельную базу. И в ней для каждого сообщения сделай поле допустим read. Пользователь прочел, поставь 1. Не прочел оставь 0

Добавлено через 2 минуты и 9 секунд
Определять сообщения по дате? А если пользователь их не прочитает? А просто зайдет? Лучше для каждого сообщения указывать переменную типа true и false

Автор: ksnk 27.9.2008, 14:29
SneG0K, и у каждого сообщения будет 3000 записей про 3000 пользователей?

Автор: Валерия 27.9.2008, 14:42
А как это делаеться на форумах типа этого или phpbb или vbulitein?

Автор: SneG0K 27.9.2008, 16:06
ksnk, зачем? Создать отдельную таблицу, с идентификатором пользователя и туда писать сообщения.

Автор: shurup_312 27.9.2008, 18:06
Цитата

shurup_312, У каждого юзера есть таблица со статистикой - время последнего посещения, ets... Вот туда добавить поле - "прочитанные темы" типа Text. Добавится 1 запись для каждого юзера.
В это поле ложить массив вида
array('ТЕМА_ID'=>%LAST_TIME%, ...) записывать его с помошью serialize, unserialize. 

В принципе, такой массив можно хранить и в куках. Если юзер скачет с компа на комп - это может быть не очень удобно, но в принципе - нормльное решение, я 

а хороший вариант тоже, спасибо большое. Даже наверное пока лучший...
Цитата

Создай для сообщений отдельную базу. И в ней для каждого сообщения сделай поле допустим read. Пользователь прочел, поставь 1. Не прочел оставь 0

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)