Zeg пишет:Не совсем описанная проблема, но близко. Если в отдельном форуме все темы прикрепленные (допустим только создали форум и в него добавили 2 темы с правилами и пр.), то тогда не верно ведет себя счетчик страниц. Отображается " "Страниц: 0 >>", причем ">>" - ссылка на страницу 2 (p=2), на нее даже можно перейти. А от туда "<<" - переход на страницу "-1" (p=-1). Открепление хотя бы одной темы решает проблему.
Тоже самое наблюдается, если в форуме вообще нет тем.
... или в топике есть только одно сообщение и оно прикреплено.
Решается довольно просто сразу для всех описанных случаев. Откройте файл include/lib.php, найдите строку:
CODE: $total_pages = ceil($total/$per);
и под ней разместите строки:
CODE: if (!$total_pages) {
$total_pages = 1;
}
Тут несколько посложнее. Откройте файл postings.php, найдите строки:
CODE: // Упорядочение массива ключей прикреплённых сообщений
if (empty($threads[$firstkey]['pinmsg'])) unset($threads[$firstkey]['pinmsg']);
else sort($threads[$firstkey]['pinmsg']);
// Сохраняем файл темы
$fm->_Write($fp_threads, $threads);
// Запись в лог инфы о прикреплении / откреплении сообщения
$fm->_WriteLog(sprintf(($msg == $fm->LANG['MsgPinned']) ? $fm->LANG['PinMsgLog'] : $fm->LANG['UnpinMsgLog'], $threads[$firstkey]['name'],
strip_tags($allforums[$fm->input['forum']]['name'])), 2);
и замените их строками:
CODE: // Упорядочение массива ключей прикреплённых сообщений
if (empty($threads[$firstkey]['pinmsg'])) unset($threads[$firstkey]['pinmsg']);
else sort($threads[$firstkey]['pinmsg']);
$name = $threads[$firstkey]['name'];
$ps = (isset($threads[$firstkey]['pinmsg'])) ? count($threads[$firstkey]['pinmsg']) : 0;
// Сохраняем файл темы
$fm->_Write($fp_threads, $threads);
unset($threads);
$list = $fm->_Read2Write($fpList, "forum{$fm->input['forum']}/list.php");
if ($ps) {
$list[$fm->input['topic']]['ps'] = $ps;
}
else {
unset($list[$fm->input['topic']]['ps']);
}
$fm->_Write($fpList, $list);
unset($list);
// Запись в лог инфы о прикреплении / откреплении сообщения
$fm->_WriteLog(sprintf(($msg == $fm->LANG['MsgPinned']) ? $fm->LANG['PinMsgLog'] : $fm->LANG['UnpinMsgLog'], $name,
strip_tags($allforums[$fm->input['forum']]['name'])), 2);
Далее в файле forums.php найдите строку:
CODE: $totalpages = ceil($totalposts/intval($fm->user['posts2page']));
и замените её строками:
CODE: if (!isset($topics[$topic_id]['ps'])) {
$totalpages = ceil($totalposts / intval($fm->user['posts2page']));
}
else {
$totalpages = ceil(($totalposts - $topics[$topic_id]['ps']) / (intval($fm->user['posts2page']) - $topics[$topic_id]['ps']));
}
Наконец, в файле post.php найдите строки:
CODE: /* Сохраняем флокнутые файлы*/
$fm->_Write($fp_topic,$topic);
$TotalPosts = count($topic)-1;
unset($allmessages);
if ($PostAdded) $allforums[$forum_id]['posts']++;
и над ними вставьте строки:
CODE: reset($topic);
$firstkey = key($topic);
if (isset($topic[$firstkey]['pinmsg']) && !isset($topic[$firstkey]['ps'])) {
$list[$topic_id]['ps'] = count($topic[$firstkey]['pinmsg']);
}
Важно отметить, что информация о кол-ве страниц в теме с прикреплёнными сообщениями обновиться (на странице просмотра раздела), как только в тему будет добавлено очередное сообщение (уже после установки данного исправления). Также обновление будет производиться при каждой последующей операции прикрепления/открепления сообщений в теме. |