Ответов: 23 Просмотров: 0
|
Проблема оказалась намного сложнее и глубже, чем я думал изначально. Я то, наивный, думал добавлю "+1" в какое-то место и всё заработает - не тут-то было!
Во всём виноват мод прикреплённых сообщений. Проблема в том, что непосредственно на той странице, где должно было бы быть прикреплённое сообщение, оно не добавляется, а просто переносится вверх.
Но, потратив около двух недель и несколько бессонных ночей, мне, кажется, удалось найти правильный алгоритм расчёта и сварганить PHP-код.
ВНИМАНИЕ! Предлагаемый код заплатки предназначен только для тех, у кого НЕ установлен мод хранения статистики на сервере (поскольку я этим модом не пользуюсь, то и адаптировать исправленный алгоритм для него не могу).
Моя заплатка: в файле topic.php строкиCODE: $fm->input['p'] = floor($post_key/$fm->user['posts2page'])+1;
$post_key += count($_pinmsg) * $fm->input['p'];
$fm->input['p'] = floor(($post_key - 1)/$fm->user['posts2page'])+1; заменить на строкиCODE:/*
Заплатка на функцию перехода к конкретному сообщению
Автор CAB http://exbb.su/
*/
$_pinmsgold = 0; // Количество прикреплённых сообщений старше искомого
if (count($_pinmsg) !== FALSE) { // Если есть прикреплённые сообщения
foreach ($_pinmsg as $datepinmsg) if ($datepinmsg < $fm->input['postid']) $_pinmsgold++; // Считаем сколько прикреплённых сообщений старше искомого
}
$_pages = floor(($post_key + 1) / ($fm->user['posts2page'] - count($_pinmsg))); // Вероятная страница с искомым сообщением
$_posts = ($post_key + 1) + $_pages * count($_pinmsg) - $_pinmsgold; // Порядковый номер искомого сообщения
$fm->input['p'] = ceil($_posts / $fm->user['posts2page']); // Страница с искомым сообщением
Поскольку у меня уже нет ни сил, ни желания протестировать данную заплатку во всевозможных вариациях (да это и не реально), прошу не просто установить данную заплатку, а ещё и погонять её работу.
Порядок тестирования такой: выбираете самую многостраничную тему, заходите в её версию для печати и переходите по ссылке каждого сообщения в основную версию, контролируя при этом правильность перехода. При этом меняйте количество и расположение прикреплённых сообщений и количество сообщений на странице.
Да, и имейте ввиду, что прикреплённых сообщений в теме должно быть, как минимум, на одно меньше, чем заданное количество сообщений на странице - это само по себе разумеющееся требование для мода прикреплённых сообщений (я даже рекомендую отключить пользователям возможность устанавливать себе количество сообщений на страницу, чтоб не нарваться на проблему).
Также хочу выразить надежду, что кто-то сможет адаптировать изменённый алгоритм для мода хранения статистики на сервере и выложить здесь готовый код. |