Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Теоретически можно. Я уже писал об этом - потратил много времени, результата не достиг. Желающие изменить этот механизм - милости просим.
Ну а как-нибудь, например, если ответ в форуме, тогда для всех форум делать непрочитанным, а при прочтении темы проверять топики, если нет непрочитанных то снимать отметку с форума?
А какой алгоритм проверки форума на непрочтение?
if (!$pun_user['is_guest'] &&
!is_reading( $cur_forum['log_time'], $cur_forum['last_post']) &&
$cur_forum['last_post'] > $cur_forum['mark_read'] &&
$cur_forum['poster_id'] != $pun_user['id'] &&
($cur_forum['last_post'] > $pun_user['last_visit'] || (time() - $cur_forum['last_post'] < $pun_user['mark_after']) )) {
// форум не прочтен
}
Я не совсем понял, как сделано на этом форуме, но вот такой вариант.
Есть таблица id-пользователя, id-топика, id-форума и время последнего входа.(id-форума -не обязательно)
При входе пользователя в топик в эту таблицу заносится или апдейтится запись.
При входе на первую страницу выполняется запрос по каждому форуму и топику в нем, и если время последнего сообщения в топике больше времени последнего входа или нет записи в таблице и время последнего сообщения меньше 15 дней, то форум считается не прочитанным.
Количество записей в базе будет большим, но судя по форуму http://forum.visp.ru/, где на данный момент 1307 зарегистрированных пользователей, 6582 тем и 120434 сообщений и форум очень посещаемый и висит еще в локальной сети, то вроде все должно работать. К тому же мы очень уменьшаем таблицу, вводя время, через которое считается, что топик прочитан и его должен выбирать администратор.
При входе на первую страницу выполняется запрос по каждому форуму и топику в нем, и если время последнего сообщения в топике больше времени последнего входа или нет записи в таблице и время последнего сообщения меньше 15 дней, то форум считается не прочитанным.
Положим что записи есть (есть темы которые юзер точно читал), но есть темы время которых меньше времени последнего захода (т.е. старые) и время которых меньше чем 15 (темы еще актуальны) и которые не представлены в нашей таблице, т.е. юзер их не читал.
А теперь кто-бы всё это объединил в запросе и в условии????
Во viewtopic.php, т.е. после посещения темы, таблица обрастает новой записью, из которой понятно какойо юзер, какую тему посмотрел и во сколько. Либо если ранее этот юзер уже посещал эту тему и в таблице есть запись об этом - обновляется время посещения.
Ага, т.е. надо добавить в запись кроме юзер/время/тема ещё информацию о разделе. При заходе на форум, из базы делается последовательно выборка по разделам, и сравнение времени посещения темы в разделе с временем последнего поста в разделе. Как только натыкаемся на "время посещения темы" <"время последнего поста", раздел считаем непрочитанным. Возникающая проблема - есть новая тема, в которой пользователь ещё не был, потому нет записи о её посещении в таблице. Решение - сравниваем количество тем в разделе в интервале "сегодня" - "сегодня - срок пометки тем прочитанными", и если оно не совпадает - раздел не прочитан. В противном случае - раздел прочитан. И так последовательно по всем разделам.
Возникающая проблема - есть новая тема, в которой пользователь ещё не был, потому нет записи о её посещении в таблице.
Это не проблема, если нет темы, то она не прочитана.
Пробовали мы тут с нашими программерами составить один запрс для форума, о его прочитанности. Получается, но очень большое и для простоты считали, что в таблицу посещений входит поле форум_id. Правда это все теоретически, а практически - я не пробовал.
Готова втарая редакция беты.
Сделан инсталлер, инсталлер умный, поэтому можно запускать без опасений что будет ошибка, даже если уже установлена первая бета. Но следующая установка в ридми уже не такая, поэтому обязательно все проверьте. Ридми стал более сложный, будьте предельно внимательны.
Мод отмечает темы и разделы только после их посещения или по прошествии указанного в профиле ( в секции display ) количества дней, но не более 100. Это сделано чтобы уменьшить нагрузку на БД, хотя честно говоря это всё теория и на практике я не могу даже предполагать как все это будет работать. Мод почти работоспоспообен, за исключением следующих недостатков:
1. после создания темы для автора она всё равно отображается как непрочтённая Не понимаю как это происходит.
2. нет кнопок "пометить прочтенными"
3. если в футере выбрать ссылку "Показать последнии сообщения", то будут показаны все вне зависимости от того "прочтенные" они или нет. Это надо править search.php так что новые редакции этого мода еще вполне ожидаемы.
Качать отсюда: http://punbb.ru/downloads/RMT.zip
Это последняя версия данного мода?
По указанной там ссылке всегда последняя версия.
Спасибо, данный мод подходит для версии 1.2.14 ?
Просто в install_mod.php стоит проверка на версию.
Подходит, если в инсталлере будет ошибка из-за версии, то нужно вписать туда свою. Я щас не помню какая там версия.
Ну а кто - нибудь выложит целековый мод, или всё тут перечитать и собрать по кусочкам?
hcs
Благодарю!
hcs
Поставил, вроде работает, спасибо
Один вопрос, при нажатии на ссылку "Пометить все форумы как прочитанные" форумы и темы не отмечаются как прочитанные, это где-то моя ошибка (если да то где предположительно?) или это не доработка мода?
Хотя на этом форуме всё работает, значит это скорее всего моя ошибка, где её искать?
Редактировался Юко (2006-12-26 17:35:38)
Юко, это старая версия. Надеюсь тебе не будет трудно откатится назад, скачать новую версию и провести установку заново?
Значит надо будет откатится назад, дропнуть таблицы - log_topics и log_forums, запустить инсталлер заново, потом следовать инструкции. Вот новая ссылка: http://punbb.ru/downloads/RMT.zip
Извините за неудобство, я почемуто думал, что архив давно обновлён.
hcs
Эх, ясно, буду делать, как руки дайдут.
Спасибо.
у меня версия 1.2.14 голый только руссификация. Мануал на совпадает в index.php разные строки там где LEFT JOIN и тд. Может есть установленный мод на голую версию?
Что именно несовпадает? Не вижу в этом ничего страшного, давай разберемся.
hcs
переставил, но вот какое дело, меня смущает вот это действие в viewforum.php:
#
#---------[ 20. FIND (line ~ 114 ]---------------------------------------------------
#
$sql = 'SELECT id, poster, subject, posted, last_post, last_post_id, last_poster, num_views, num_replies, closed, sticky, moved_to FROM '.$db->prefix.'topics WHERE forum_id='.$id.' ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];
#
#---------[ 21. REPLACE WITH ]---------------------------------------------------
#
$sql = 'SELECT t.id, t.poster, t.subject, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_views, t.num_replies, t.closed, t.sticky, t.moved_to, lt.log_time, lf.mark_read FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'log_topics AS lt ON lt.user_id='.$pun_user['id'].' AND lt.topic_id=t.id LEFT JOIN '.$db->prefix.'log_forums AS lf ON lf.forum_id=t.forum_id AND lf.user_id='.$pun_user['id'].' WHERE '.$db->prefix.'t.forum_id='.$id.' ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];
Оно у меня вызывает ошибку:
PunBB reported: Unable to fetch topic list
Database reported: Unknown column 'punt.forum_id' in 'where clause' (Errno: 1054)
(pun это у меня такой префикс к таблицам)
Вместо этого, я пока поставил строчку с предыдущей версии мода.
(даже работает, на половину, когда жмёш "Пометить все форумы как прочитанные", форумы прочтёнными помечаются, а темы нет.)
пытался скрестить строчку со старой версии и новой, не получилось
Редактировался Юко (2007-01-04 14:26:24)
Ну тут явно опечатка, замени
WHERE '.$db->prefix.'t.forum_id
на
WHERE t.forum_id
hcs
Ясно в чём дело, исправил, спасибо.
Но когда жмёш "Пометить все форумы как прочитанные", форумы прочтёнными помечаются, а темы нет.
Подскажите как это исправить, где может быть ошибка?
Редактировался Юко (2007-01-04 15:07:00)
Глючный мод. Пока он не доотлажен до конца ставить его на официальный punbb форум - большая глупость.
Dexus
но можно помочь отладить , если конешно самому не ошибаться
сам то мод работает (пример этот форум), это в инстоляторе (реадми) возможно ошибки.
Редактировался Юко (2007-01-04 17:29:13)
Предложение по работе мода, можно ли сделать так, чтобы если в форуме (в разделе) нет новых тем, то он бы помечался как прочитанны? Дело в том, что частенько бывает ситуация, когда в форуме одна единственная не прочитанная тема, и заходиш в нее с главной страницы, потом на главную и выходиш. Получается что в форуме нет новых тем, но сам форум всеровно помечен как новый. Если в форуме остались новые темы, но он должен оставаться помечанным как новый, пока не зайдешь непосредственно в этот форум. (Если зайдешь в форум и выдешь из него, не прочитав темы, то форум помечается как прочитанный (как сейчас это реализованно в моде), это мне нравиться)
Надеюсь все понятно. Насколько трудно это сделать?
Или проще, если заходишь в тему с главной, то форум, в котором находиться эта тема, считается как прочитанным.
Редактировался Юко (2007-01-04 20:39:30)