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

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

Вы не вошли.

Объявление

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

#151 2007-04-18 21:25:06

maximum
Гость

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

Конечно, в таблице "users" появляется колонка "read_topics".

#152 2007-08-28 20:15:37

nobody
Гость

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

Кусочек из инструкции, мод брал именно с PunBB.ru:

#
#---------[ 11. OPEN ]------------------------------------------------------
#

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'];

#
#---------[ 22. FIND  (line  ~ 123 ]---------------------------------------------------
#

$sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, 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 FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].' WHERE t.forum_id='.$id.' GROUP BY t.id ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];


#
#---------[ 23. REPLACE WITH ]---------------------------------------------------
#

$sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, 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.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].'  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 t.forum_id='.$id.' GROUP BY t.id ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];


#

А вот кусочек измененного мной viewforum.php:

// Fetch list of topics to display on this page
if ($pun_user['is_guest'] || $pun_config['o_show_dot'] == '0')
{
    // Without "the dot"

$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, question, 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'];}
else
{
    // With "the dot"
    switch ($db_type)
    {
        case 'mysql':
        case 'mysqli':
            $sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, 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, t.attach_first, t.question, lt.log_time, lf.mark_read FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].'  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 t.forum_id='.$id.' GROUP BY t.id ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];            break;

        case 'sqlite':
            $sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, 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, t.attach_first, t.question FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].' WHERE t.id IN(SELECT id 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'].') GROUP BY t.id ORDER BY t.sticky DESC, t.last_post DESC';
            break;

        default:
            $sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, 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, t.attach_first, t.question FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].' WHERE t.forum_id='.$id.' GROUP BY t.id, t.subject, t.poster, 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, , t.question, p.poster_id ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];
            break;

    }
}

$result = $db->query($sql) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

Конкретно в этом куске заменены 2 запроса, прошерстил их, оставил нужные поля от голосовалки, приаттачивания файлов и т.д. Выявился такой глюк - когда тыкаю по какому-нибудь разделу форума (viewforum.php) вываливается такой месседж:

File: /usr/local/www/vhosts/arsamania.ru/httpdocs/forum/viewforum.php
Line: 157

PunBB reported: Unable to fetch topic list

Database reported: Unknown column 'foo_t.forum_id' in 'where clause' (Errno: 1054)

Проблема точно в приведенном куске файла, т.к. если этот кусок кода оставить в первоначальном виде, то все функционирует нормально, но тогда как я понимаю, сам мод Real Mark Topic as Read не будет работать так, как должен. Честно говоря, не соображу, что за поле t.forum_id, его я не нашел в БД, может просто не знаю где искать? Искал в таблице topics. А что такое where clause вообще не понимаю. С другой стороны, поле t.forum_id было и в первоначальной версии файла, так что дело должно быть не в нем...

На всякий случай - install_mod.php выполнился без ошибок, его таблицы на месте.

#153 2007-08-29 06:02:58

hcs
Гость

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

приведи строку 157

#154 2007-08-29 17:01:36

nobody
Гость

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

$result = $db->query($sql) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

#155 2007-08-29 17:38:27

hcs
Гость

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

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

#156 2007-08-29 18:20:48

nobody
Гость

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

Failed query: 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, question, lt.log_time, lf.mark_read FROM foo_topics AS t LEFT JOIN foo_log_topics AS lt ON lt.user_id=1 AND lt.topic_id=t.id LEFT JOIN foo_log_forums AS lf ON lf.forum_id=t.forum_id AND lf.user_id=1 WHERE foo_t.forum_id=5 ORDER BY sticky DESC, last_post DESC LIMIT 0, 30

Добавлено спустя     9 минут   34 секунды:
Вообще, пока такой трабл, тестирую пока с неизмененным кусочком этого кода, и вроде работает, но пока возможно, просто не все глюки проявились...
И еще, когда изменял viewforum.php по инструкции, сначала возник вопрос, какие запросы менять - в инструкции заменяются 2 запроса, в этом куске кода их всего 4, все рядом и все примерно похожи. Я заменил первый и второй (если считать сверху вниз), может в этом ошибка? В инструкции, конечно, стоят номера строк, но у меня они малость не совпадают, все таки уже много модов ставил на свой форум... Может что-то перепутал...

Редактировался nobody (2007-08-29 18:31:48)

#157 2007-08-29 18:50:41

hcs
Гость

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

У тебя в самом первом запросе, в этой части:

 WHERE '.$db->prefix.'t.forum_id='.$id.'

лишняя запись

'.$db->prefix.'

Убери это.

#158 2007-08-29 18:59:21

nobody
Гость

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

Огромное спасибо, теперь все работает без ошибок!

#159 2007-08-29 21:58:51

nobody
Гость

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

Заметил сейчас, кстати, что эта ошибочка перекочевала ко мне прямо из readme.txt к моду. Скачивал отсюда уже давно, версия RMT судя по тому же readme.txt - 1.0.0 RC - но лучше проверьте, вдруг не исправлено...

#160 2007-08-30 03:51:55

hcs
Гость

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

Давно исправлено, спасибо.

#161 2007-11-05 20:51:32

Andy
Гость

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

А почему мод не затрагивает search.php? Когда жмёшь показать новые сообщения, то прочитав их, обновляешь страницу, но индикаторы не меняются на "прочитана".

Редактировался Andy (2007-11-05 22:09:05)

#162 2007-11-28 03:11:17

maximum
Гость

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

Похоже найден источник моей проблемы.

PostScriptum: посмотрите на даты сообщений. big_smile

#163 2007-11-30 22:50:25

maximum
Гость

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

Всё, теперь и у меня "mark topic as read". 8)

#164 2008-02-09 15:55:39

SeeD
Гость

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

ошибка, о которой писал nobody много месяцев назад, по-прежнему находится в ридми из архива в первом посте. исправьте пожалуйста.

#165 2008-03-24 08:03:36

Slavik
Гость

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

hcs
ковырял мод в составе сборки 1.2.15. Есть пара предложений:
1) Убрать поле log_forum из таблицы log_forums, по-прежнему считаю форум всего лишь контейнер. Форум должен быть прочтен когда в нем прочтены все темы. Для прочтения форума можно использовать mark_read
2) Изменить запрос в search.php, чтобы искал не новые с последнего визита, а непрочитанные темы.

Если нужно, могу выложить свои изменения в удобном тебе виде

#166 2008-03-24 08:33:36

hcs
Гость

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

1) в log_forums  нет поля log_forum
2) согласен

сделай ветку в свн, посмотрим как это работает

#167 2008-03-24 21:20:58

Slavik
Гость

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

hcs
1) log_time

завтра постараюсь, если вспомню как smile

#168 2008-03-25 07:39:22

hcs
Гость

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

Slavik
1) я по прежнему считаю мою версию имеющую право на жизнь не менее, чем твоя, поэтому предлагаю реализовать совместное существование, добавив соответсвующий выбор в профиле пользователя.

#169 2008-08-27 16:44:37

Px
Гость

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

Slavik пишет:

1) Убрать поле log_forum из таблицы log_forums, по-прежнему считаю форум всего лишь контейнер. Форум должен быть прочтен когда в нем прочтены все темы. Для прочтения форума можно использовать mark_read

hcs пишет:

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

Реализацию где-то можно взять/скачать?

#170 2008-08-27 17:25:24

hcs
Гость

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

Наверное нет. Кстати говоря, по прошествии более года эксплуатации, я прихожу к выводу, что вариант реализованный в ядре 1.3 более подходящий для использования, по нескольким причинам:
1. нет запросов к бд
2. данные хранятся на стороне клиента в куках

#171 2008-08-28 06:32:20

niikto
Гость

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

а по поведению самому - в 1.3 - больше на твой мод похоже или на стандартный?

#172 2008-08-28 09:39:48

hcs
Гость

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

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

#173 2009-01-20 08:28:58

iDrum
Гость

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

Я как бы перенёс прицнип работы показа новых сообщений в темах (показывается справа от топика "new") c 1.3 на ветку 1.2.х. Как уже и сказал уважаемый hcs, работает этот принцип через куки,в них пишется ещё одна печенька вида
t226=1232428787;t312=1232428469;t232=1232428441;t305=1232427982; t280=1232427908; f3=1232427908;
то есть t(id топика || id форума)=timestamp. А потом просто палим эту печеньку и разницу во времени. Врпинципе всё работает как нада, но только у меня пока сомнения: печеньки - они ж не резиновые,и если юзер любопытный они быстро забьюца (там под эту печеньку выделяется 4048 байт(вообще под куки с одно домена можно взять только 4096 байт), остальные печеньки используюца для нужнд форума(айди+хэш пароля и другое) ). Пока я сделал только для отображения новых месаг в темах, для форумов не делал ибо у меня на форуме это не нужно. Нада кому нить сиё? Есть хороший плюс - не дрочим лишний раз бд, всё на печенюшках.

Редактировался iDrum (2009-01-20 08:30:03)

#174 2009-01-20 18:47:05

jeder
Гость

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

Мод от hcs из первого сообщения отлично работает и прост в установке.
Зачем лесопед, да ещё и такой печенютый? smile

Редактировался jeder (2009-01-20 18:48:30)

#175 2009-01-21 13:22:33

iDrum
Гость

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

jeder, ну если владелец форума желает лишний раз ерепенить бд так ради бога, я же не заставляю smile

Подвал доски

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