X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Наличие новых сообщений в теме, как реализовано?
fedornabilkin
fedornabilkin
Topic Starter сообщение 17.5.2013, 16:54; Ответить: fedornabilkin
Сообщение #1


Подскажите пожалуйста сам алгоритм или варианты реализации. Как сделать отображение новых сообщений в темах на форуме.
Я так понимаю надо использовать куки и каждому пользователю писать айди темы и время последнего сообщения. Потом сравнивать.
Но никак не пойму как сделать это для всех тем.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
wolverine_hb
wolverine_hb
сообщение 17.5.2013, 17:31; Ответить: wolverine_hb
Сообщение #2


Не знаю как это реализовано в движках, с форумами тесно не работал, но если рассуждать логически, если мы зайдем на форум в качестве гостя нам все темы показываются новыми, вне зависимости от того смотрели мы их или нет, а если вы авторизированы, и очистить куки темы все равно правильно отображаются поэтому мне кажется куки тут не при чем, подозреваю что в теблице с юзерами хранится поле в котором через запятую хранятся все прочитанные им темы, конечно может я ошибаюсь, но мне так кажется.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
isvetlichniy
isvetlichniy
сообщение 17.5.2013, 17:38; Ответить: isvetlichniy
Сообщение #3


если конкретно об этом форуме, то движен называется IPB, поставь его и проанализируй как все работает
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
Topic Starter сообщение 17.5.2013, 22:44; Ответить: fedornabilkin
Сообщение #4


[member=denis79513], просто через запятую не получится. Тут нужен массив и хранить его наверно придется в json.
Потому что надо будет сверять дату последнего поста в теме и дату в массиве. Например array("theme_id"=>12345678);
В данный момент все это как-то абстракто представляю, никакой конкретики
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MEGApixel
MEGApixel
сообщение 20.5.2013, 11:19; Ответить: MEGApixel
Сообщение #5


Если будет в одной ячейке храниться вся эта инфа через запятую или в json-формате, то я сильно разочаруюсь в движке. Это прямое нарушение нормализации данных таблиц в реляционных БД. По идее в серьезных движках такого быть не должно. Так как такая досадная вещь очень сильно влияет на производительность при больших объемах информации.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
html-ka
html-ka
сообщение 20.5.2013, 11:31; Ответить: html-ka
Сообщение #6


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

// создаем массив данных
$fruits = array (
    "fruits"  => array("a" => "orange", "b" => "banana", "c" => "apple"),
    "numbers" => array(1, 2, 3, 4, 5, 6),
    "holes"   => array("first", 5 => "second", "third")
);
// сереализуем данные
$fruits = serialize($fruits);
echo "<h2>выводим сереализованные данные, смотрим на тип переменной</h2>";
echo "<pre>";
var_dump(serialize($fruits));
echo "</pre>";
// преобразуем сереализованные данные
$fruits = unserialize($fruits);
echo "<h2>выводим данные</h2>";
echo "<pre>";
print_r($fruits);
echo "</pre>";
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
Topic Starter сообщение 21.5.2013, 10:53; Ответить: fedornabilkin
Сообщение #7


Это прямое нарушение нормализации данных таблиц в реляционных БД

Вот и меня это тоже смущает.


сереализацию никто не отменял

Получается то же самое что ли? В плане производительности.
Кто-нибудь самостоятельно реализовывал подобную задачу?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MEGApixel
MEGApixel
сообщение 21.5.2013, 13:19; Ответить: MEGApixel
Сообщение #8


Зашел на форум с другого браузера - не прочитанные темы такие же, как и в основном браузере. То есть информация о посещенных/прочитанных темах хранится все-таки на сервере (если брать движок этого форума).

Предположим, что у каждого пользователя в таблице, допустим, `users` есть поле `themes`, куда сохраняется вся информация о посещенных темах, прочитанных сообщениях и пр. Если по этому полю в дальнейшем не планируется поиск, а данные из него нужно будет только извлечь зная id пользователя - то такой вариант будет приемлемым. А если в движке в будущем предусматриваются запросы типа `SELECT `id` FROM `users` WHERE `themes` LIKE (...) ` - то такая структура уже подходить не будет, в виду низкого быстродействия. Если такого не предвидится, то можно хранить в одной ячейке всю инфу. А формат хранения (сериализация, json, банально через запятую, массив и пр.) можно выбрать самостоятельно.

Согласен, что кривовато и тема остается открытой. Если кому не жалко времени, можно покопаться в исходниках движка.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 21.5.2013, 14:20; Ответить: matroskin8
Сообщение #9


MEGApixel, И чем этот вариант отличается от того, который описан в заминусованном Вами посте?
То, что данные о посещенных темах хранятся не в куках - это логично, поскольку форум может быть весьма объемным и на все темы может и кук не хватить... да и привязка должна быть именно к юзеру, а не к клиенту.
Но тема алгоритма действительно интересна. Здесь предлагается несколько интересных вариантов решения.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MEGApixel
MEGApixel
сообщение 21.5.2013, 15:00; Ответить: MEGApixel
Сообщение #10


И чем этот вариант отличается от того, который описан в заминусованном Вами посте?


Ничем. Был не прав. Жаль нельзя минусы исправить обратно :D

А по поводу вопроса ТС, то пришло такое решение.
Создать отдельную таблицу, в которой будут записываться все "атомарные" действия юзеров по поводу посещения тем. Назовем её, к примеру, `visit`. Она предположительно будет иметь такую структуру:
  • user_id;
  • theme_id;
  • visit_time;

Думаю, что в разъяснениях особо не нуждается. Теперь по порядку.
  1. Запись в таблицу `visit` происходит, когда юзер заходит в определенную тему. Если в таблице присутствует запись с таким же `user_id` и `theme_id`, то она апдейтится новым `visit_time`.
  2. При построении страницы для каждой темы проверяется время последнего сообщения. Полученное время сравнивается с временем последнего посещения (из таблицы `visit`). Если первый операнд больше, то значит в теме появились новые непрочитанные сообщения (для этого юзера). Если нет - то все сообщения прочитаны.

Вот как-то так. Алгоритм можно дополнять и расширять, но его основу я вижу такой.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Большие ставки для кликов в Я.Директ. Как удешевить?
2 rownong27 1119 26.3.2024, 14:13
автор: knezevolk
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
12 uahomka 2290 25.3.2024, 6:52
автор: Skyworker
Открытая тема (нет новых ответов) Как отозвать банковский платеж фрилансеру?
28 metvekot 3913 25.3.2024, 6:34
автор: Skyworker
Открытая тема (нет новых ответов) Как вывести деньги в Украине с заблокированного Юмани ?
23 freeax 3639 24.3.2024, 20:55
автор: Liudmila
Открытая тема (нет новых ответов) Через какой браузер и как можно найти в кэшэ браузера видео
10 Room 1933 23.3.2024, 7:41
автор: Room


 



RSS Текстовая версия Сейчас: 29.3.2024, 0:13
Дизайн