Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#76 2006-11-23 17:14:34

mnk
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Сегодня ходил по этому форуму. Не прочитав всех сообщений одного форума перешел в другой. А статус форума  - погас.
И что бы просмотреть, остались ли там еще непрочитанные сообщения, нужно снова зайти в форум.
Мне кажется, статус должен гореть, пока в форуме есть непрочитанные сообщения. И если пользователь не хочет читать какие то непрочитанные сообщения, просто нажмет ссылку "Отметить все сообщения прочитанными" и статус потухнет. И я уже писал, что было бы удобно, если этот статус будет ссылкой. Нажал на нее и форум или топик становятся прочитанными.

#77 2006-11-23 17:28:25

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Я всё понимаю, но уж как сделано, так и есть. Кроме того я придерживаюсь другой точки зрения относительно пометки форума.
Если кроме пожеланий и мнений  мне покажут хотябы примерный алгоритм решения, то я обязательно попробую его реализовать применительно к моду.  Об этом я уже говорил не раз и вот хотябы даже здесь - http://punbb.ru/viewtopic.php?pid=5178#p5178

#78 2006-11-24 11:05:11

mnk
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

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

Редактировался mnk (2006-11-24 11:10:51)

#79 2006-11-24 11:39:07

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Ну когда все баги вроде перечисленных выше  пофиксим.

#80 2006-11-25 23:39:58

Px
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Сорри за задержку, у провайдера упал биллинг, доступ к интернету восстановился только сегодня
Предисловие - поскольку я не являюсь программистом, просьба не пинать сильно за предложенные идеи smile
В процессе обдумывания организовал 3 алгоритма, один из которых кажется оптимальным, два других за компанию (может я ошибаюсь).
Для оценки количества операций выделено 4 ситуации, в которых происходит доступ к БД:
1) Вход на главную страницу форума
2) Вход в тему
3) Создание темы
4) Добавление поста

Алгоритм 1 - перебор разделов.
Описание: при заходе на главную страницу, в каждом разделе перебираем темы на предмет наличия отметки о непрочтении, если натыкаемся на непрочитанную тему, то ставим на разделе знак непрочтения, в противном случае считаем раздел прочитанным. Для уменьшения количества операций проверяем не все темы в разделе, а темы в интервале времени от сегодняшнего дня до <сегодня>-<срок пометки тем прочитанными>.
Количество операций в выбранных ситуациях:
1) n < x < n*m, где n - количество разделов на форуме, m - количество перебираемых тем в разделах на форуме
2) 0
3) 0
4) 0

Алгоритм 2 - простой счётчик.
Описание: при заходе на главную страницу смотрим специальную переменную, в которой указано, прочитан ли данный раздел, или нет. 0 - прочитан, 1 - нет. При заходе в тему, кроме пометки прочитанной самой темы, производится перебор тем в разделе, если непрочитанных тем больше нет, то устанавливаем переменную в 0, в противном случае не изменяем её значение. Интервал перебора <сегодня>-<срок пометки тем прочитанными>. При добавлении темы в раздел или поста в существующую тему, устанавливаем у всех пользователей форума, кроме автора, значение переменной в 1.
Количество операций в выбранных ситуациях:
1) n, где n - количество разделов на форуме
2) 0 < x < k, где k - количество тем в разделе в интервале от сегодняшнего дня до <сегодня>-<срок пометки тем прочитанными>
3) r-1, где r - количество пользователей на форуме
4) r-1, где r - количество пользователей на форуме

Алгоритм 3 - инкрементный счётчик.
Описание: при заходе на главную страницу смотрим специальную переменную, в которой указано, прочитан ли данный раздел, или нет. Значение переменной = количеству непрочитанных тем в разделе, переменная = 0 - раздел прочитан, >0 - нет. При заходе в тему уменьшаем значение переменной текущего раздела на 1 для данного пользователя. При добавлении темы в раздел или поста в существующую тему, увеличиваем значение счётчика для всех пользователей форума, кроме автора, на 1.
Количество операций в выбранных ситуациях:
1) n, где n - количество разделов на форуме
2) 1
3) r-1, где r - количество пользователей на форуме
4) r-1, где r - количество пользователей на форуме

Попробуем оценить в цифрах количество операций на примере данного форума с настройками пометки (15 дней) по-умолчанию.
Алгоритм 1.
1) 15 < x < 81
2) 0
3) 0
4) 0

Алгоритм 2.
1) 15
2) 0 < x < 28 (28 - максимальное количество тем в одном из разделов)
3) 750 (ужас tongue)
4) 750 (ужас tongue)

Алгоритм 3.
1) 15
2) 1
3) 750 (ужас tongue)
4) 750 (ужас tongue)

Если можно считать информацию о помеченных темах в разделе за 1 заход (чтение строки или столбца?), и получить сумму элементов, то количество обращений к БД оказывается совсем мизерным, хотя и немного возрастёт загрузка процессора

#81 2006-11-26 02:57:26

maximum
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Я тоже не программист, но представив всю картину решил высказать своё мнение.

Методом "простого счётчика", только делать проверку не всех тем, а с момента последнего визита, по времени.

Может ещё добавить "вход на форум"? Зачем нам обновлять весь форум, если человеку нужен только один. То же и с топиком, обновлять только топик при нахождении в нём.

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

#82 2006-11-26 03:01:26

Px
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

maximum пишет:

Методом "простого счётчика", только делать проверку не всех тем, а с момента последнего визита, по времени.

Ничем не лучше того варианта, что есть сейчас....

#83 2006-11-26 10:51:36

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

maximum пишет:

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

Я не наблюдаю такую проблему!

#84 2006-11-26 14:29:32

Px
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

hcs пишет:

Я не наблюдаю такую проблему!

+1

#85 2006-11-26 15:06:50

Slavik
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Эээ... можно посмотреть как это в других форумах сделано... Например, глупый форум smf, имеющий в составе всего один файл: index.php :-D Или у старших братьев: ipb, phpbb...
И еще: по-моему не стоит ограничивать юзера т.н. сроком пометки тем прочитанными, надо оставить возможность отключить эту фичу

#86 2006-11-26 15:26:21

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Slavik пишет:

И еще: по-моему не стоит ограничивать юзера т.н. сроком пометки тем прочитанными, надо оставить возможность отключить эту фичу

Если сделать так, то таблица log_topics распухнет от бесполезных данных ( в существующей реализации)

#87 2006-11-26 18:03:03

Px
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Slavik пишет:

И еще: по-моему не стоит ограничивать юзера т.н. сроком пометки тем прочитанными, надо оставить возможность отключить эту фичу

А смысл? Всё равно после срока пометки, тема автоматом станет прочитанной, т.е. проверять после этого срока - выполнять бессмысленную работу....

Slavik пишет:

Эээ... можно посмотреть как это в других форумах сделано... Например, глупый форум smf, имеющий в составе всего один файл: index.php :-D Или у старших братьев: ipb, phpbb...

Я собирался попросить друга посмотреть на phpbb, но инета не было, завтра он появится на работе, я его попрошу....

#88 2006-11-26 18:36:57

Slavik
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

hcs пишет:

Если сделать так, то таблица log_topics распухнет от бесполезных данных ( в существующей реализации)

По-другому будет криво, например, если чувак пошел отливать, а его пробило так, что он 16 дней отливал и не успеет чувак меганьюсы прочитать :-D

Px пишет:

А смысл? Всё равно после срока пометки, тема автоматом станет прочитанной, т.е. проверять после этого срока - выполнять бессмысленную работу....

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

Редактировался Slavik (2006-11-26 18:40:46)

#89 2006-11-26 19:02:47

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Slavik
у тебя есть идея как это сделать не перегрузив мускул?

#90 2006-11-26 19:05:34

Px
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Slavik пишет:

По-другому будет криво, например, если чувак пошел отливать, а его пробило так, что он 16 дней отливал и не успеет чувак меганьюсы прочитать :-D

Если чувак отвалился на 16 дней, то ему уже будет как-то пофиг пометка wink

#91 2006-11-26 19:15:50

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Px пишет:

Алгоритм 1 - перебор разделов.
Описание: при заходе на главную страницу, в каждом разделе перебираем темы на предмет наличия отметки о непрочтении, если...

Мммм. Никакой путаницы в терминах нет? Какие отметки должны ставиться, о "прочтении" или о "непрочтении"?
Метку о "прочтении" поставить легко - зашел в тему и появилась метка в log_topics содержащая конректного юзера и конкретную тему.
Как ставить метку о "непрочтении"? Кто-то написал что-то в тему и всем юзерам в log_topics пишется метка что эта тема для них стала непрочтенной?
Или считаем непрочтенной тему, которой нет в log_topics?

#92 2006-11-26 21:19:00

Slavik
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

hcs пишет:

Slavik
у тебя есть идея как это сделать не перегрузив мускул?

О да! Надо поставить Oracle smile
А еще в $db->prefix.polls в полях есть такие данные: a:2:{i:1;i:1;i:3;i:1;}. Я не знаю что это значит, но можно как-нибудь записывать сюда id прочитавшего. Еще можно если у юзера нет непрочитанных тем, то записать дату этого события и потом проверять сначала последний пост с этой датой, а если он позже, тогда ту волшебную структуру. Да и в любом случае посты оставленные после посещения будут означать непрочтение темы

#93 2006-11-26 21:36:56

Px
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

hcs пишет:

Мммм. Никакой путаницы в терминах нет? Какие отметки должны ставиться, о "прочтении" или о "непрочтении"?
Метку о "прочтении" поставить легко - зашел в тему и появилась метка в log_topics содержащая конректного юзера и конкретную тему.
Как ставить метку о "непрочтении"? Кто-то написал что-то в тему и всем юзерам в log_topics пишется метка что эта тема для них стала непрочтенной?
Или считаем непрочтенной тему, которой нет в log_topics?

Ок, давай разберёмся. Я перечитал тему, но не увидел полного описания алгоритма пометки сейчас (хотя может для программиста кода плагина достаточно smile).
Я так понимаю, у каждой темы добавился дополнительный атрибут log_topics, если он присутствует для данного пользователя, то тема считается непрочитанной, так?

#94 2006-11-27 05:28:34

maximum
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

hcs пишет:

Я не наблюдаю такую проблему!

Тоесть? У меня вот после прочтения (открыл, прочитал, закрыл) маркер так и не потухает. Это разве работает?

#95 2006-11-27 06:15:20

Px
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

maximum пишет:

Тоесть? У меня вот после прочтения (открыл, прочитал, закрыл) маркер так и не потухает. Это разве работает?

Это обозначает, что мы столкнулись с багом, на моём форуме, несмотря на то, что у большинства форумчан (в том числе и у меня), пометка работает нормально, нашлось несколько человек, у которых пометка не работала. Потому нужна дополнительная информация...

#96 2006-11-27 06:30:10

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Px пишет:

Я так понимаю, у каждой темы добавился дополнительный атрибут log_topics, если он присутствует для данного пользователя, то тема считается непрочитанной, так?

Конечно же нет. Как у темы может появиться атрибут для каждого пользователя, количество которых варьируется? Никак. Впрочем конечно можно взять вариант Slavikа  и в таблице posts завести поле, в котором хранить массив ид юзеров и потом хитро им оперировать, выкидывая неактульных, вписывая актуальных, но я этим извращением заниматься не буду.
Как работает мой алгоритм:
Есть таблица log_topics, туда записывается user_id, topic_id, time
Во viewtopic.php, т.е. после посещения темы, таблица обрастает новой записью, из которой понятно какойо юзер, какую тему посмотрел и во сколько. Либо если ранее этот юзер уже посещал эту тему и в таблице есть запись об этом - обновляется время посещения.
В index.php удаляются все записи из log_topics для опрделенного юзера, время которых меньше времени актуальности ( у каждого пользователя свое время, по дефолту 15 дней)
Этот механизм позволяет поддерживать таблицу менее засраной избавляя таблицу от неактуальных данных.
Еще есть таблица log_forums , внее пишется  user_id, forum_id, time, еще там есть поле mark_read
которое отвечает за пометку форумов кнопкой "отметить прочтенной".
Аналогично с viewtopic.php, во viewforum.php происходит отметка форума о прочтении, т.е. в форум достаточно заглянуть и привет.
Решение о паказе метки "новая тема" принимается на основе всех этих данных + информация о времени последнего посещения и времени последнего сообщения в теме.

Добавлено Mon Nov 27 09:34:47 2006 :

maximum пишет:
hcs пишет:

Я не наблюдаю такую проблему!

Тоесть? У меня вот после прочтения (открыл, прочитал, закрыл) маркер так и не потухает. Это разве работает?

Опиши свои действия подробнее, начиная от того как ты открыл тему, с какого места, с главной страницы, с форума, с поиска последних непрочитанных, или вообще с внешней ссылки.  Потом, что именно горит непрочтенным, тема или форум?

#97 2006-11-27 10:13:44

mnk
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Во всяком случае у нас возникает только одна дилема. Как снять отметку о прочтении форума. С топиками  сейчас все нормально работает.
Пометка форума и топика, как нового работает и в базовом варианте, и в этом вопросе вопросов нет.
Как отметить топик прочтеным - вроде тоже проблем нет. Зашел, значит прочитал.
А вот с форумами совсем не однозначно.
Тут вариант hcs, по моему мнению не совсем удачный.
1. Человек не обязан читать форум по порядку, и в таком случае остаются непрочитанные топики, а форум отмечен, как прочитанный.
2. Если человек пользуется ссылкой "Пометить все форумы как прочитанные" возникает та жа проблема.

#98 2006-11-27 10:54:12

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

mnk пишет:

2. Если человек пользуется ссылкой "Пометить все форумы как прочитанные" возникает та жа проблема.

А тут какая проблема? Если нажимается эта ссылка - все становится прочтенным.

#99 2006-11-27 12:37:51

mnk
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Извиняюсь перепутал ссылка "Показать новые сообщения, с момента Вашего последнего визита"
А нельзя при выводе главной страницы, проверять на прочитанность всех сообщений в форуме и в зависимости от этого ставить флаг на данный форум - прочитано или нет? И так по всем форумам.

Редактировался mnk (2006-11-27 12:40:37)

#100 2006-11-27 13:00:13

hcs
Гость

Re: Real Mark Topic as Read -=+ пометка тем как прочтенные +=-

Теоретически можно. Я уже писал об этом - потратил много времени, результата не достиг. Желающие изменить этот механизм - милости просим.

mnk пишет:

Извиняюсь перепутал ссылка "Показать новые сообщения, с момента Вашего последнего визита"

Это не ошибка мода, потомучто это еще просто не реализовано.

Подвал доски

Под управлением FluxBB. Хостинг Hostens