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

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

1. cynical2207 - 25 августа 2013 — 05:30 - перейти к сообщению
В теме есть прикреплённое сообщение, если в разделе содержащем эту тему нажать "последняя страница" тема открывается где-то с середины, а не на последней странице.
(Добавление)
Версия PHP:5.2.17-0.dotdeb.0
Версия движка: ExBB FM 1.0 Final
2. NordWest - 25 августа 2013 — 09:39 - перейти к сообщению
Что значит "прикреплённое сообщение"?
3. cynical2207 - 25 августа 2013 — 09:46 - перейти к сообщению
NordWest, сообщение, которое всегда висит первым в теме, на каждой странице.
4. NordWest - 25 августа 2013 — 10:02 - перейти к сообщению
Понял. Посмотрю на досуге...
5. NordWest - 25 августа 2013 — 13:34 - перейти к сообщению
Не могу пока повторить вашу ситуацию - сложно создать более 60 страниц. Радость
При 20 страницах вроде всё ОК... Однако
(Добавление)
Создал 63 страницы - проблема не проявилась. Не знаю чем вам помочь, т.к. получается, что это не ошибка движка.
6. BON - 25 августа 2013 — 19:06 - перейти к сообщению
cynical2207 пишет:
В теме есть прикреплённое сообщение, если в разделе содержащем эту тему нажать "последняя страница" тема открывается где-то с середины, а не на последней странице.

возможно из-за того, что сообщение которое прикреплено размещалось где то на середине страницы
7. cynical2207 - 26 августа 2013 — 03:53 - перейти к сообщению
BON пишет:
возможно из-за того, что сообщение которое прикреплено размещалось где то на середине страницы


Видимо нет. Попробовал следующее: скопировал весь бб-код из верхнего сообщения, удалил его, создал новое сообщение со скопированным кодом (т.е. с настоящими датой/временем), прикрепил. В результате то же самое, переходит именно на 56 страницу из 62.
8. NordWest - 26 сентября 2013 — 17:54 - перейти к сообщению
Проблема в коде есть - вылезла и на моём форуме.
Вызвана тем, что при расчёте номера последней страницы не учитываются прикреплённые посты. Пока думаю как поправить.
9. 1Bot - 26 сентября 2013 — 18:43 - перейти к сообщению
NordWest пишет:
Проблема в коде есть - вылезла и на моём форуме.
Вызвана тем, что при расчёте номера последней страницы не учитываются прикреплённые посты. Пока думаю как поправить.


Совершенно верно, при расчете количества страниц (P) учитывается только общее количество постов в теме (N) и количество сообщений на странице (n), которое задается в профиле у каждого пользователя
CODE:
P = 1 + floor( N / n )

где функция floor() - округление в меньшую сторону

При наличии (m) прикрепленных сообщений в теме (отображаются вверху на каждой странице) количество страниц правильнее считать по формуле
CODE:
P1 = 1 + floor( (N - m) / (n - m) )


Пример
CODE:
58 сообщений, 3 прикрепленных, 15 сообщений на странице
N = 58, m = 3, n = 15

P = 1 + floor( N / n ) = 1 + floor( 58 / 15 ) = 1 + floor( 3,866666666666667 ) = 1 + 3 = 4

P1 = 1 + floor( (N - m) / (n - m) ) = 1 + floor( (58 - 3) / (15 - 3) ) =
= 1 + floor( 55 / 13 ) = 1 + floor( 4,230769230769231 ) = 1 + 4 = 5


P.S. Обязательно нужно делать проверку что n > m!
10. NordWest - 26 сентября 2013 — 18:59 - перейти к сообщению
1Bot пишет:
которое задается в профиле у каждого пользователя
CODE:P = 1 + floor( N / n )
где функция floor() - округление в меньшую сторону
В коде используется функция ceil которая округляет в большую сторону
CODE:
ceil($totalposts/intval($fm->user['posts2page']))

но суть от этого остаётся та же.

1Bot пишет:
При наличии (m) прикрепленных сообщений в теме (отображаются вверху на каждой странице)
Вот с получением количества прикреплённых сообщений и есть пока главная засада. Я нигде на форуме не нашел, что бы отображалось количество (может конечно плохо искал, есть такой косяк - невнимателен бываю).
В базе то же вроде нет места, где бы хранилась конкретная цифра. Похоже придётся перебирать все посты, искать в них прикреплённые и плюсовать. Но процедура то получается ресурсоёмкая и по сути лишняя - нужно эту цифру в базе сразу хранить, а не пересчитывать каждый раз.
11. 1Bot - 26 сентября 2013 — 19:08 - перейти к сообщению
NordWest пишет:
Вот с получением количества прикреплённых сообщений и есть пока главная засада. Я нигде на форуме не нашел, что бы отображалось количество (может конечно плохо искал, есть такой косяк - невнимателен бываю).


Посмотрите на структуру файла с информацией о сообщениях темы в первом сообщении темы есть массив
CODE:
[pinmsg] => Array // массив прикрепленных к верху сообщений в порядке вывода


соответственно
CODE:
m = count( $pinmsg );
12. CAB - 26 сентября 2013 — 19:11 - перейти к сообщению
1Bot, NordWest, Вы не уловили суть проблемы. Ну это понятно, я тоже потратил кучу времени пока не понял. Проблема не в учёте приклеплённых сообщений, они учитываются. Проблема в том, что если прикреплённое сообщение старше искомого, то одну страницу оно не занимает - оно там уже и так было изначально.
Посмотрите мои наработки http://exbb.info/community/topic...=6&topic=368
13. NordWest - 26 сентября 2013 — 19:11 - перейти к сообщению
1Bot пишет:
Посмотрите на структуру файла с информацией о сообщениях темы в первом сообщении темы есть массив
Я же говорю - невнимателен. Пропустил. Однако
Сейчас попробую реализовать предложенный вами алгоритм.
(Добавление)
CAB
Обязательно посмотрю и ваши наработки, но похоже уже завтра...

PS: а чего никто топикстартера не ткнул в темы, где эта проблема обсуждалась? Я думал это новый глюк, а оказывается это уже давняя головная боль.
14. CAB - 26 сентября 2013 — 19:32 - перейти к сообщению
NordWest пишет:
а чего никто топикстартера не ткнул в темы, где эта проблема обсуждалась? Я думал это новый глюк, а оказывается это уже давняя головная боль
Лично у меня просто нет решений для ExBB FM 1.0 Final - те наработки для RC1, которые кому-то надо адаптировать для финала.
15. NordWest - 26 сентября 2013 — 19:41 - перейти к сообщению
Ясно, попробую адаптировать в меру сил и возможностей.
(Добавление)
Применил только алгоритм предложенный 1Bot - вроде правильно работает.

Открываем файл forums.php в котором ищем

CODE:
$totalpages = ceil($totalposts/intval($fm->user['posts2page']));


которую меняем кодом

CODE:
if ($totalposts > $fm->user['posts2page'])
{
$threads = $fm->_Read('forum'.$forum_id.'/'.$topic_id.'-thd.php',FALSE);
$threads_keys = array_keys($threads);
$f_thread = $threads [$threads_keys[0]];
$pinmsg = (isset($f_thread['pinmsg'])) ? count( $f_thread['pinmsg'] ) : 0 ;
$totalpages = 1 + floor(($totalposts-$pinmsg)/(intval($fm->user['posts2page'])-$pinmsg));
}
else {$totalpages = ceil($totalposts/intval($fm->user['posts2page']));}


Код вероятно не идеален. Скорее всего можно было проще получить количество прикреплённых постов, но главное что я так или иначе до этой цифры добрался.
У меня работает верно, но у меня форум крохотный и постов мало....

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

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