У меня как то посетители жаловались, что после клика по теме с новыми сообщениями переход часто делается на страницу с уже прочтёнными. Я и сам это замечал, бесило ужасно.
Полазил во viewtopic.php и понял, что критерием свежести сообщения является только превосходство его даты над полем юзера lastvisit
Вот как я лечился.
Строка 75
- Код: Выделить всё
$sql = "SELECT p.post_id
FROM " . POSTS_TABLE . " p, " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
WHERE s.session_id = '$session_id'
AND u.user_id = s.session_user_id
AND p.topic_id = $topic_id
AND p.post_time >= u.user_lastvisit
ORDER BY p.post_time ASC
LIMIT 1";
Заменил на:
- Код: Выделить всё
if (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all']) ) $my_last_visit=$HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all'];
$sql = "SELECT u.user_lastvisit
FROM " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
WHERE s.session_id = '$session_id'
AND u.user_id = s.session_user_id
LIMIT 1";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain newer/older topic information', '', __LINE__, __FILE__, $sql);
} else {
$row = $db->sql_fetchrow($result);
$lastvisit = $row['user_lastvisit'];
}
if ($lastvisit>$my_last_visit) $my_last_visit = $lastvisit;
$tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) : array();
$tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) : array();
if ( !empty($tracking_topics[$topic_id]) && !empty($tracking_forums[$forum_id]) )
{
$topic_last_read = ( $tracking_topics[$topic_id] > $tracking_forums[$forum_id] ) ? $tracking_topics[$topic_id] : $tracking_forums[$forum_id];
}
else if ( !empty($tracking_topics[$topic_id]) || !empty($tracking_forums[$forum_id]) )
{
$topic_last_read = ( !empty($tracking_topics[$topic_id]) ) ? $tracking_topics[$topic_id] : $tracking_forums[$forum_id];
}
if ($topic_last_read>$my_last_visit) $my_last_visit=$topic_last_read;
$sql = "SELECT post_id
FROM " . POSTS_TABLE . "
WHERE topic_id = $topic_id AND post_time >= ".intval($my_last_visit)."
ORDER BY post_time ASC
LIMIT 1";







