Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как подсветить новые сообщения на форуме?
 
 автор: Job   (30.06.2007 в 05:32)   письмо автору
 
 

Вот сидел думал, думал и придумал вот что. При просмотре списка форумов в файл записывается количество тем и постов. вот только фигня :) если пользователей на сайте много, будет создано много папок имя пользователя\id форума\ и наконец файл с id темы в котором и хранится сколько постов было в прошлый раз...

Как сделать проще и желательно на Базах Данных?

   
 
 автор: cheops   (30.06.2007 в 06:36)   письмо автору
 
   для: Job   (30.06.2007 в 05:32)
 

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

   
 
 автор: Sobachka   (30.06.2007 в 11:41)   письмо автору
 
   для: cheops   (30.06.2007 в 06:36)
 

>Хм... а имена пользователей хранятся в таблице базы данных? Нельзя туда добавить ещё одно поле с временем последнего посещения и подсчитывать количество новых сообщений, которые появились после этой временной метки?

Тоже интересует...
cheops, это не идельный варинт

   
 
 автор: ddhvvn   (30.06.2007 в 11:52)   письмо автору
 
   для: Sobachka   (30.06.2007 в 11:41)
 

А что же Вас смущает в этом варианте?

Такой способ кстати и используется в LiteForum...

   
 
 автор: Trianon   (30.06.2007 в 11:59)   письмо автору
 
   для: ddhvvn   (30.06.2007 в 11:52)
 

>А что же Вас смущает в этом варианте?

Если человек посетил портал в момент времени T, это еще не значит, что он прочитал сообщения всех ветвей, написанные к этому моменту.

>Такой способ кстати и используется в LiteForum...

Это лишь причина переделать LiteForum, но никак не повод брать с него пример.

PS. cheops, помнится, около года назад утверждал, что для честного хранения таблицы ластридов ему не хватает объема БД и/или процессорных мощностей. Но тогда каша варилась еще на нодексе...
PS2. Ветвь я найти не смог, хотя очень пытался, и слова в ней были характерные...

   
 
 автор: LordFreeman   (30.06.2007 в 12:32)   письмо автору
 
   для: Trianon   (30.06.2007 в 11:59)
 

>Если человек посетил портал в момент времени T, это еще не значит, что он прочитал сообщения всех ветвей, написанные к этому моменту.

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

   
 
 автор: Trianon   (30.06.2007 в 12:41)   письмо автору
 
   для: LordFreeman   (30.06.2007 в 12:32)
 

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

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

Самое неприятное, что в LiteForum это проявляется не только при плохой связи.
Заходишь в раздел. Несколько сотен новых сообщений.
Смотришь, отвечаешь на них потихоньку. Прерываться нельзя.
Если пашешь без пауз - волна просмотренных тем никак не помечается.
Если не успееешь пропахать весь раздел без 20мин перерыва - хлоп! - нетронутое исчезает.

   
 
 автор: Job   (30.06.2007 в 14:38)   письмо автору
 
   для: Trianon   (30.06.2007 в 12:41)
 

Да, Trianon, именно в этом и проблема.
По дпте последнего посещения непойдет.
Нужно именно по количеству сообщений

Всё даже отлично работает в моем варианте, правда громозко.

Но вот, опять же проблема допустим я зашел на форум мне записалось что сообщения 15, вышел,.... Администратор удалил сообщение, сообщений стало 14, а у меня записано 15. и тогда я пропущу одно новое сообщение. Это плохо.

Как же всётаки можно это всё осилить?

Может сделать что-то типа этого...
хм...


if($post[$i]<$file[0]) $flash = "del_m.gif"; //Если меньше чем было показывать что удалено
if($post[$i]==$file[0]) $flash = "off_m.gif"; //Если равно, показывать что нет новых
if($post[$i]>$file[0]) $flash = "on_m.gif"; //Если больше, показывать что новые сообщения

Но тоже блин надоест по форуму лазить и смотреть все темы где были удалены сообщения....

Какой же тут выход?
И вообще можно ли это всё как нибудь на БД перевести?
И как же тогда PHPBB Всё делает?

   
 
 автор: Unkind   (30.06.2007 в 14:42)   письмо автору
 
   для: Job   (30.06.2007 в 14:38)
 

Так Вы хотите просто картинку пихнуть? Можно хранить не кол-во сообщений а MAX(`id`) FROM `messages` WHERE `topic` = 'идентификатор_темы'. И сверять его с текущим.
В таком случае даже можно хранить MAX(`id`) в бинарном виде, чтобы в последствии занимало меньше. Хотя, ощутите это только при MAX(`id`) > 9999.

   
 
 автор: Job   (30.06.2007 в 14:50)   письмо автору
 
   для: Unkind   (30.06.2007 в 14:42)
 

ага! Отлично! Идея с макс id понравилась :)

А сообщения в форуме можно тогда и по дате подсвечивать, ничего не случится :)

А как бы это всё в базе хранить?

Ведь неизвестно в каком форуме новую тему начнут...
Расчитать количество тем нереально...

Как это делают?

   
 
 автор: Trianon   (30.06.2007 в 14:59)   письмо автору
 
   для: Job   (30.06.2007 в 14:38)
 

>Да, Trianon, именно в этом и проблема.
>По дпте последнего посещения непойдет.
>Нужно именно по количеству сообщений
>
>Всё даже отлично работает в моем варианте, правда громозко.
>
>Но вот, опять же проблема допустим я зашел на форум мне записалось что сообщения 15, вышел,.... Администратор удалил сообщение, сообщений стало 14, а у меня записано 15. и тогда я пропущу одно новое сообщение. Это плохо.

Хранят ластриды: это пометки - id-ы последних просмотренных сообщений в таблице.
В самом грубом виде если -
id_thread, id_user, id_lastread
но мощность такой таблицы - число ветвей х число пользователей.



>Как же всётаки можно это всё осилить?
>Какой же тут выход?

Unkind (22.06.2007 в 00:57) предложил выдвинуть эту проблему очередной задачей.

>
>И вообще можно ли это всё как нибудь на БД перевести?
О том чтобы хранить всё это в файлах, речи даже не идет.
Хотя ... такие умельцы могут найтись, что оптимизируют поиск именно для этого случая.

>И как же тогда PHPBB Всё делает?

Если мне память не изменяет - в БД.
Впрочем я видел варианты и с кукисным хранением ластридов.
В том же phpclub.ru . Но тут другая проблема - ластриды теряются при переходе с работы домой например. И совершенно бесполезны в инет-кафе.
Опять же, возможно, на практике лучшим будет комбинированный вариант.
Работает посетитель с форумом - ластриды в кукисах, все довольны.
Закончил работу, нажал "Выход" - ластриды ушли в БД.
Зашел с другой машины, ластриды загрузились на клиент в кукисы.

   
 
 автор: Job   (01.07.2007 в 20:35)   письмо автору
 
   для: Trianon   (30.06.2007 в 14:59)
 

А как именно будет выглядеть запрос на MAX(id)?


$query = mysql_query("SELECT * FROM `post` WHERE `id_t` = '42';");
             
$row = mysql_fetch_object($query);
$max_id = $row->MAX(id);     
print("$max_id");


Это единственный бред который пришел мне в голову.... :)

   
 
 автор: Unkind   (01.07.2007 в 20:49)   письмо автору
 
   для: Job   (01.07.2007 в 20:35)
 

<?php
$sql 
mysql_query("SELECT MAX(`id`) FROM `post` WHERE `id_t` = '42';");
$max_id mysql_result($sql0);
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования