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

Разное

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

 

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

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

тема: Новые сообщения
 
 автор: Евгений Петров   (11.08.2005 в 22:44)   письмо автору
 
 

Я уже в онлайн почти час, а новые сообщения как были новыми так и остались. Почему так? И почему если написать url без http:// то при нажатии на него возникает милое окошко softtime.ru ошибка 404 (не буду уточнять что это значит :) ). Вот например:
[url]www.mail.ru[/url]
http://www.mail.ru

   
 
 автор: cheops   (11.08.2005 в 23:39)   письмо автору
 
   для: Евгений Петров   (11.08.2005 в 22:44)
 

Новые сообщени отмечаются как прочитанные, если вас не было на форуме более 20 минут или вы явно их отмечаете ссылкой "Отметить всё". Ссылки исправим, спасибо, они значатся в плане - дело в том, что такая ситуация обрабатывается в URL, но к сожалению, пока не обрататывается при использовании тэгов.

   
 
 автор: Евгений Петров   (11.08.2005 в 23:47)   письмо автору
 
   для: cheops   (11.08.2005 в 23:39)
 

>Новые сообщени отмечаются как прочитанные, если вас не было на форуме более 20 минут
Почему, когда я захожу утром то все что с вечера не просмотрел у меня новое, а через 20 минут они станут старыми, а вот сегодня что то никак.
И ещё в mozilla кнопка "цитировать" не работает.

   
 
 автор: cheops   (11.08.2005 в 23:58)   письмо автору
 
   для: Евгений Петров   (11.08.2005 в 23:47)
 

>Почему, когда я захожу утром то все что с вечера не
>просмотрел у меня новое, а через 20 минут они станут
>старыми, а вот сегодня что то никак.
Вероятно сегодня интервалы между загрузками страниц, меньше 20 минут - форум отметит сообщения как прочитанные, если вы не будете загружать страницы в течении 20 минут... но вы можете не ждать этого момента, а просто нажать кнопку "Отметить всё" - все сообщения будут помечены как прочитанные.

>И ещё в mozilla кнопка цитировать не работает.
Блин... к сожалению с JavaScript всегда так, то там не работает, то там...

   
 
 автор: Akira   (12.08.2005 в 00:06)   письмо автору
 
   для: cheops   (11.08.2005 в 23:58)
 

А еще в moziila не работает "Используйте тэги для выделения текста:"
:)) Как надо. Т.е. если текст выделить, то он окажеться не внутри тега

   
 
 автор: cheops   (12.08.2005 в 00:12)   письмо автору
 
   для: Akira   (12.08.2005 в 00:06)
 

Это и в Opera так... а нет ли какого способа реализовать это в Opera/Mozila или это только для IE возможно?

   
 
 автор: Евгений Петров   (12.08.2005 в 00:32)   письмо автору
 
   для: cheops   (12.08.2005 в 00:12)
 

Где то тут (http://softtime.ru/forum/read.php?id_forum=4&id_theme=2593&page=1) че то подобное. Правда не уверен на счет браузеров. А вообще при нажатии на кнопку цитировать вставляется весь текст из поста выше или только выделенный? Помоему второй вариант лучше.

   
 
 автор: cheops   (12.08.2005 в 00:35)   письмо автору
 
   для: Евгений Петров   (12.08.2005 в 00:32)
 

Нет происходит цитирование всего текста...

   
 
 автор: Евгений Петров   (12.08.2005 в 00:37)   письмо автору
 
   для: cheops   (12.08.2005 в 00:35)
 

А смысл?

   
 
 автор: cheops   (12.08.2005 в 00:43)   письмо автору
 
   для: Евгений Петров   (12.08.2005 в 00:37)
 

Что бы можно было вставить цитату.

   
 
 автор: Евгений Петров   (12.08.2005 в 15:43)   письмо автору
 
   для: cheops   (12.08.2005 в 00:43)
 

А если я напримерзахочу процитировать конретный кусок текста. Помоему лучше было бы сделать что то вроде [comment][/comment] и чтоб они выводились в отдельной таблице.

   
 
 автор: cheops   (12.08.2005 в 16:29)   письмо автору
 
   для: Евгений Петров   (12.08.2005 в 15:43)
 

Это потребует выделение цитаты рамкой, которая будет оттягивать внимение к цитате от текста сообщения.

   
 
 автор: Евгений Петров   (12.08.2005 в 16:35)   письмо автору
 
   для: cheops   (12.08.2005 в 16:29)
 

Можно тогда выделить другим цветом (менее броским). Это ещё лучше и проще помоему.

   
 
 автор: Akira   (12.08.2005 в 14:41)   письмо автору
 
   для: cheops   (12.08.2005 в 00:12)
 

А вот в Opera8 все прекрасно работает как надо :)
И выделение

И код

И цитирование
>Это и в Opera так... а нет ли какого способа реализовать это
>в Opera/Mozila или это только для IE возможно?

   
 
 автор: cheops   (12.08.2005 в 16:16)   письмо автору
 
   для: Akira   (12.08.2005 в 14:41)
 

/"Вздыхая и печально поглядывая на скин Metal Blue"/ Нужно переходить на Opera 8...

   
 
 автор: Akira   (12.08.2005 в 16:20)   письмо автору
 
   для: cheops   (12.08.2005 в 16:16)
 

Да :) Кстате я думаю, надо применить к Opera ne политику которая применяеться к Firefox :) Т.е. привлекать людей к этому браузеру.

   
 
 автор: cheops   (12.08.2005 в 16:31)   письмо автору
 
   для: Akira   (12.08.2005 в 16:20)
 

Они для сотовых телефонов пишут браузер, поэтому они вряд ли будут экспериментировать с бесплатными проектами...

   
 
 автор: Евгений Петров   (12.08.2005 в 00:17)   письмо автору
 
   для: cheops   (11.08.2005 в 23:58)
 

>Вероятно сегодня интервалы между загрузками страниц, меньше 20 минут
Я б так не сказал. Я их загружал с интервалом примерно в минуту, а то и чаще.

   
 
 автор: cheops   (12.08.2005 в 00:34)   письмо автору
 
   для: Евгений Петров   (12.08.2005 в 00:17)
 

Ну тогда всё правильно, если интервал меньше 20 минут, то и не срабатывает сервис, отмечающий сообщения прочитанными.

   
 
 автор: Евгений Петров   (12.08.2005 в 00:37)   письмо автору
 
   для: cheops   (12.08.2005 в 00:34)
 

ААА! Чувствую я никогда не разберусь как у вас устроена эта система... :)

   
 
 автор: cheops   (12.08.2005 в 00:42)   письмо автору
 
   для: Евгений Петров   (12.08.2005 в 00:37)
 

В нём и не нужно разбираться :))) Сервис заботится, чтобы вы заметили новые сообщения и они не пропали пока вы отвечаете на них - как только вы уходите с форума более чем на 20 минут сообщения помечаются как прочитанные. Если вы не хотите ждать 20 минут - можете просто нажать "Отметить всё" и сообщения будут отмечены как прочитанные.

   
 
 автор: OZ_   (17.08.2005 в 05:23)   письмо автору
 
   для: cheops   (12.08.2005 в 00:42)
 

Ещё фишка: я никогда небыл (до сегодняшнего дня) в Форуме о форуме, но для меня там значилось всего 2 новых сообщения.
Ещё: я захожу на форум, выбираю тему, потом жму "Список тем" (возвращаюсь) - те сообщения, которые были для меня новыми в этой теме, новыми для меня и остались. А я её просмотрел.

P.S.: Если честно, я уже не обращаю внимания, что там пишется про новые сообщения, стараюсь сам запомнить, что смотрел :)

   
 
 автор: Loki   (17.08.2005 в 09:49)   письмо автору
 
   для: OZ_   (17.08.2005 в 05:23)
 

Время посещения учитывается "в общем", а не для каждого форума в отдельности.

   
 
 автор: cheops   (17.08.2005 в 12:48)   письмо автору
 
   для: OZ_   (17.08.2005 в 05:23)
 

"Новыми" сообщения остаются пока вы не покинете форум и вас не будет на нём более 20 минут, так как привязка новых сообщений идёт именно по времени вашего посещения.

   
 
 автор: Loki   (17.08.2005 в 13:45)   письмо автору
 
   для: cheops   (17.08.2005 в 12:48)
 

Практика эта не вполне правильная: появляюсь я после выходных, вижу две сотни новых вообщений и уже не могу уйти не прочтя их все, так как если я зайду спустя пол часа, то придется рыть самому - что читал а что нет.
Предлагаю такую схему: в базу записыватся номер форума и дата последнего просмотреного сообщения. все сообщения которые раньше этой даты - считаются прочитанными. Есть неудобство: топики придется просматривать снизу вверх. Зато сразу видно что читал, а что - нет.

   
 
 автор: Axxil   (17.08.2005 в 13:58)   письмо автору
 
   для: Loki   (17.08.2005 в 13:45)
 

А я вот подумал, а нельзя в куки записывать непрочитанные темы? Прочитал - удалилась кука. Так глядишь и базу разгрузить можно и пользователям удобно.

   
 
 автор: Loki   (17.08.2005 в 14:27)   письмо автору
 
   для: Axxil   (17.08.2005 в 13:58)
 

То есть когда я впервые вхожу на форум, мне записывается кука на 40000 сообщений? А если кука удалена: как определить была ли она вообще? А впротивном случае, надо держать в куках перечень всех прочитанных сообщений. А если я захожу на форум с нескольких копрьютеров?
Не... это не вариант.

   
 
 автор: Axxil   (17.08.2005 в 14:44)   письмо автору
 
   для: Loki   (17.08.2005 в 14:27)
 

Я имею ввиду тем кто хочет.
Не хочешь - не надо, предварительно спросить разрешение.

Кука не удаляется! Она ПЕРЕПИСЫВАЕТСЯ. Удаляется она только по сроку давности.

И кто тут собрался все поля таблицы с сообщениями в куку писать?
Во первых достаточно id темы(даже при 40000 ~ 200Кб). Да и этого не надо :)
Можно хранить темы только скажем за месяц.
В куку пишется массив с номерами новых тем, и помере прочтения кука обновляется и тема удаляется из массива. А если куки нет значит в первый раз или давно не был. Тогда запишем ему пустую куку и с этого дня начнём считать новые темы.

В случае других компьютеров, то это да, слабое место, можно организовать временное хранение где-нибудь на сервере.
Короче ИМХО личные настройки пользователей должны хранится на их личных компьютерах, а не засорять и без того не маленькую базу.

   
 
 автор: Loki   (17.08.2005 в 15:20)   письмо автору
 
   для: Axxil   (17.08.2005 в 14:44)
 

200кб? ну ну... тока вот кука ограничена всего 4кб:)

   
 
 автор: Axxil   (17.08.2005 в 16:22)   письмо автору
 
   для: Loki   (17.08.2005 в 15:20)
 

Да ну? Не знал :)
Да двести Кб и не нужно будет. Если 4 кб мало будет можно разбить на несколько кук

PS Это единственное возражение?

   
 
 автор: Киналь   (17.08.2005 в 14:00)   письмо автору
 
   для: Loki   (17.08.2005 в 13:45)
 

Даже не номер форума, а id темы. Т.е. user_id | theme_id | last_visit_time и апдейтить при запросе любой темы (read.php, если не ошибаюсь). Правда, табличка получится немаленькая=) Но можно удалять записи месячной, к примеру, давности.

   
 
 автор: Loki   (17.08.2005 в 14:14)   письмо автору
 
   для: Киналь   (17.08.2005 в 14:00)
 

Табличка получится не немаленькая, а офигенная! Кроме того, как вы себе это представляете? При создании новой темы добавлять столбец к таблице непрочитанных? Неспортивно;)

   
 
 автор: Киналь   (17.08.2005 в 14:32)   письмо автору
 
   для: Loki   (17.08.2005 в 14:14)
 

Ну, таблица счетчика не меньше=) А системы вы не так поняли. Как истые программисты. будем разговаривать кодом:-)


$un_q="SELECT user FROM visits
              WHERE theme_id='$topic' AND user='$_COOKIE[nick]'";
$un_res=mysql_query($un_q);
if (mysql_num_rows($un_res) > 0)
    {
     mysql_query("UPDATE visits SET last_visit=NOW()
                         WHERE user='$_COOKIE[nick]' AND theme_id='$topic'");
    }
else
    {
     mysql_query("INSERT INTO visits VALUES
                  ('$_COOKIE[nick]', '$topic', NOW())") or die(mysql_error());
    }
}

   
 
 автор: Loki   (17.08.2005 в 15:41)   письмо автору
 
   для: Киналь   (17.08.2005 в 14:32)
 

Думаю, вас не затруднит привести структуру таблицы visits:)))
Заодно помножить количество топиков на количество зарегистрированных участников, а так же прикинуть сколько будет дополнительных запросов к базе при формировании списка тем:)

   
 
 автор: Киналь   (17.08.2005 в 16:26)   письмо автору
 
   для: Loki   (17.08.2005 в 15:41)
 

=)
nick | theme_id | last_visit_time

Размер - большой, конечно; однако и вы, в свою очередь, прикиньте размер таблицы того же Power Counter;-)

   
 
 автор: OZ_   (17.08.2005 в 16:42)   письмо автору
 
   для: Киналь   (17.08.2005 в 16:26)
 

А если в таблицу users этого форума добавить поле readed , куда записывать serialize массив idшек прочитанных сообщений? То есть идти от противного: когда пользователь заходит первый раз, readed=NULL, следовательно ничего он не читал. И только если он будет очень активно читать все темы, readed имеет шанс стать заметно большим.

Ещё вариант: для каждого сообщения хранить поле readers - serialize массив idшек тех, кто его прочитал. Фактически, вероятность того, что каждое сообщение будет прочитано каждым посетителем, очень мала (хоть это и очень хороший форум), а вот вероятность прочтения одним из посетителей всех сообщений более реальна (хотя тоже не велика). Кроме того, сообщений всегда больше, чем посетителей, следовательно, в любом случае, поле readers будет (теоритически) меньше, чем readed.

   
 
 автор: Loki   (17.08.2005 в 17:41)   письмо автору
 
   для: OZ_   (17.08.2005 в 16:42)
 

А что делать если в теме появился новый ответ? Стирать из базы все пометки о прочтении данной темы?

   
 
 автор: Loki   (17.08.2005 в 17:37)   письмо автору
 
   для: Киналь   (17.08.2005 в 16:26)
 

Э-э-э... извините, Power Counter вызывается только админом - если отчет формируется минуту - он это переживет. А тут надо в реальном времени формировать подобную конструкцию для десятка (сотни?) пользователей...

   
 
 автор: Киналь   (17.08.2005 в 17:46)   письмо автору
 
   для: Loki   (17.08.2005 в 17:37)
 

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

   
 
 автор: Loki   (17.08.2005 в 17:58)   письмо автору
 
   для: Киналь   (17.08.2005 в 17:46)
 

Вот меня и смущает, что при построении списка тем добавляется по одному поисковому запросу (по немаленькой базе) для каждой темы.
То есть алгоритм получается следующий:
Получаем список тем, в цикле вызываем сначала дату последнего посещения темы, затем количество сообщений в теме с датой больше заданного. То есть у нас запросы к 4 таблицам. Из них, к двум он будет повторяться циклически 30 раз (столько тем за раз отображается)
Я же предлагаю вариант проще: получаем список тем, если дата последнего ответа в тему больше заданной, то помечаем тему как непрочитанную. В итоге запрос всего к 2 таблицам. Причем, не надо гонять никаких циклов.

   
 
 автор: Киналь   (17.08.2005 в 18:24)   письмо автору
 
   для: Loki   (17.08.2005 в 17:58)
 

Так, конечно, проще, но я когда это писал, предполагал запись типа "Сообщений - 20, из них новых - 18". Но вы правы - здесь вполне достаточно самого факта наличия новых сообщений.

   
 
 автор: cheops   (17.08.2005 в 19:04)   письмо автору
 
   для: Loki   (17.08.2005 в 17:58)
 

Мне идея Loki про хранение даты для каждого из форумов понравилась - тогда действительно, если долго человека не было на форуме можно каждый форум поэтапно прочесть (на это потребуется дополнительно 0.5 Мб в базе), про темы не очень понравилось - дорого для каждого посетителя хранить непрочитанные темы - для этого понадобится около 64 Мб (для того числа посетителей и тем, что сейчас на форуме и эта цифра будет расти с каждым посетителем и темой), это при том, что сам форум занимает 20 Мб. Потребоность такая есть и общая дата датя для всех форумов родилась не случайно, а из-за того, что форум необходимо было разместить в одной базе данных.

   
 
 автор: Akira   (17.08.2005 в 19:54)   письмо автору
 
   для: cheops   (17.08.2005 в 19:04)
 

А почему данные о непрочитанных или прочитанных сообшениях нельзя храниться в cookie?

   
 
 автор: Киналь   (17.08.2005 в 22:42)   письмо автору
 
   для: Akira   (17.08.2005 в 19:54)
 

Есть ограничение на количество и общий объем cookie.

ЗЫ В защиту моей идеи скажу, что она не моя=) Она вполне рабочая, и применяется, к примеру, здесь: http://forums.ag.ru/ Для уменьшения размера можно объявлять прочитанными старые темы. Кстати, сейчас собственные сообщения считаются новыми...

   
 
 автор: Loki   (17.08.2005 в 23:14)   письмо автору
 
   для: Киналь   (17.08.2005 в 22:42)
 

Моя идея тоже давно обкатана на форуме http://dervish.ru/forum.php:)
Правда, там она базируется на cookie, что не очень удобно.

   
 
 автор: Axxil   (18.08.2005 в 11:04)   письмо автору
 
   для: Киналь   (17.08.2005 в 22:42)
 

4 kb = 4096 байт -> 4096 цифры так как номера тем пока четырёхзначные делим на 4 получаем 1024. Это максимально колличество возможных тем для запоминания.
Но мы забыли про разделители:
Составляем систему уравнений
у - количество тем 4*y - количество байт на темы
x - количество разделителей по одному байту
x + 4y=4096
x=2y (два разделителя на одну тему. Пренебрегаем двумя байтами отсутствия конечных разделителей :))
решая систему получаем: y ~ 682 темы.
Неужели не хватит?

   
 
 автор: cheops   (18.08.2005 в 13:22)   письмо автору
 
   для: Axxil   (18.08.2005 в 11:04)
 

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

   
 
 автор: Киналь   (18.08.2005 в 14:28)   письмо автору
 
   для: cheops   (18.08.2005 в 13:22)
 

Хех, раз пошла такая пьянка... Сделайте заодно и постраничную навигацию=)

   
 
 автор: cheops   (18.08.2005 в 22:13)   письмо автору
 
   для: Киналь   (18.08.2005 в 14:28)
 

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

   
 
 автор: Artem S.   (18.08.2005 в 22:29)   письмо автору
 
   для: cheops   (18.08.2005 в 22:13)
 

А как насчет идеи:
отказаться от структурного вида форума.
Помоему это уже пережиток прошлого.

   
 
 автор: cheops   (18.08.2005 в 22:46)   письмо автору
 
   для: Artem S.   (18.08.2005 в 22:29)
 

Хм... а помоему шаг назад.

   
 
 автор: Киналь   (18.08.2005 в 22:58)   письмо автору
 
   для: cheops   (18.08.2005 в 22:46)
 

Ну... Как говориться, без обид, но... Так и правда не удобно. Все привыкли, но когда приходится читать строки вдвое меньше экрана, думаешь, что лучше бы по другому. Да и в длинной теме искать новые где-то в середине тоже не очень удобно.

   
 
 автор: Евгений Петров   (19.08.2005 в 01:46)   письмо автору
 
   для: Киналь   (18.08.2005 в 22:58)
 

То что строки на пол экрана - это поправимо (сверху есть кнопка). А вот то что ответы иногда бывают в самом низу - это не совсем удобно и не всегда понятно на чье это сообщение ответ. Поэтому лучше просто писать имя того на чье сообщение ответили.

   
Rambler's Top100
вверх

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