ExBB Community » Файловый ExBB » Решение проблем » Переход на следующую страницу темы после публикации сообщения

Страниц (2): « 1 [2]
 

16. Zeg - 9 ноября 2011 — 23:45 - перейти к сообщению
CAB, а в теме прикрепленное сообщение есть?
17. CAB - 10 ноября 2011 — 16:36 - перейти к сообщению
Zeg пишет:
а в теме прикрепленное сообщение есть?
Нет.
18. BON - 10 ноября 2011 — 17:59 - перейти к сообщению
CAB, а с чего решили что это траблы lib.php а не fm.class.php ???
(Добавление)
я сравнил со своим либ.пхп вроде всё так же. но это на вскидку. если есть какая то програма для сравнения кода плиз в студию её
19. CAB - 10 ноября 2011 — 18:57 - перейти к сообщению
BON, N++
(Добавление)
Плагины -> Compare
20. CAB - 13 ноября 2011 — 00:06 - перейти к сообщению
Я нашёл в чём проблема... Но пока искал наткнулся на другую проблему: если в теме есть прикреплённое сообщение, то корректность перехода на другое сообщение зависит от того, старше или младше искомого сообщения прикреплённое. Наверное не очень понятно объяснил? В общем упёрся пока. Вопрос, как вытащить ID или дату прикреплённого сообщения? Нигде не могу найти признака что именно это сообщение прикреплено. Где это прописывается?
21. CAB - 21 ноября 2011 — 20:35 - перейти к сообщению
Проблема оказалась намного сложнее и глубже, чем я думал изначально. Я то, наивный, думал добавлю "+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']); // Страница с искомым сообщением

Поскольку у меня уже нет ни сил, ни желания протестировать данную заплатку во всевозможных вариациях (да это и не реально), прошу не просто установить данную заплатку, а ещё и погонять её работу.
Порядок тестирования такой: выбираете самую многостраничную тему, заходите в её версию для печати и переходите по ссылке каждого сообщения в основную версию, контролируя при этом правильность перехода. При этом меняйте количество и расположение прикреплённых сообщений и количество сообщений на странице.
Да, и имейте ввиду, что прикреплённых сообщений в теме должно быть, как минимум, на одно меньше, чем заданное количество сообщений на странице - это само по себе разумеющееся требование для мода прикреплённых сообщений (я даже рекомендую отключить пользователям возможность устанавливать себе количество сообщений на страницу, чтоб не нарваться на проблему).
Также хочу выразить надежду, что кто-то сможет адаптировать изменённый алгоритм для мода хранения статистики на сервере и выложить здесь готовый код.
22. 1Bot - 27 сентября 2013 — 09:56 - перейти к сообщению
Алгоритм расчета номера страницы (P2) по номеру сообщения в теме (N2), без учета прикрепленных сообщений и количеству сообщений на странице (n), которое задается в профиле у каждого пользователя, при наличии (m) прикрепленных сообщений в теме

Произвести подсчет количества прикрепленных сообщений (m2), отправленных раньше сообщения с номером N2
CODE:
P2 = 1 + floor( ( N2 - m2 ) / ( n - m ) )
23. CAB - 27 сентября 2013 — 15:13 - перейти к сообщению
1Bot, Вы протестировали свой алгоритм по приведённой мной выше методике?
CAB пишет:
Порядок тестирования такой: выбираете самую многостраничную тему, заходите в её версию для печати и переходите по ссылке каждого сообщения в основную версию, контролируя при этом правильность перехода. При этом меняйте количество и расположение прикреплённых сообщений и количество сообщений на странице.

(Добавление)
1Bot пишет:
P2 = 1 + floor( ( N2 - m2 ) / ( n - m ) )
Прикинул на калькуляторе, вроде всё правильно получается.
24. NordWest - 28 сентября 2013 — 05:45 - перейти к сообщению
CAB
Попробовал у себя на форуме спровоцировать ошибку по предложенному вами алгоритму. Как не бился - ничего не вышло.

Поискал в файле topic.php строки, с котрыми вы работали...
Похоже ваше решение уже включено в финал (строка 148)
CODE:
$fm->input['p'] = ceil(($post_key + 1) / ($fm->user['posts2page'] - count($_pinmsg)));

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0331]     [ ]