В теме есть прикреплённое сообщение, если в разделе содержащем эту тему нажать "последняя страница" тема открывается где-то с середины, а не на последней странице.
(Добавление)
Версия PHP:5.2.17-0.dotdeb.0
Версия движка: ExBB FM 1.0 Final
1. cynical2207 - 25 августа 2013 — 05:30 - перейти к сообщению
2. - 25 августа 2013 — 09:39 - перейти к сообщению
Что значит "прикреплённое сообщение"?
3. cynical2207 - 25 августа 2013 — 09:46 - перейти к сообщению
NordWest, сообщение, которое всегда висит первым в теме, на каждой странице.
4. - 25 августа 2013 — 10:02 - перейти к сообщению
Понял. Посмотрю на досуге...
5. - 25 августа 2013 — 13:34 - перейти к сообщению
Не могу пока повторить вашу ситуацию - сложно создать более 60 страниц.
При 20 страницах вроде всё ОК...
(Добавление)
Создал 63 страницы - проблема не проявилась. Не знаю чем вам помочь, т.к. получается, что это не ошибка движка.
При 20 страницах вроде всё ОК...
(Добавление)
Создал 63 страницы - проблема не проявилась. Не знаю чем вам помочь, т.к. получается, что это не ошибка движка.
6. BON - 25 августа 2013 — 19:06 - перейти к сообщению
cynical2207 пишет:
В теме есть прикреплённое сообщение, если в разделе содержащем эту тему нажать "последняя страница" тема открывается где-то с середины, а не на последней странице.
возможно из-за того, что сообщение которое прикреплено размещалось где то на середине страницы
7. cynical2207 - 26 августа 2013 — 03:53 - перейти к сообщению
BON пишет:
возможно из-за того, что сообщение которое прикреплено размещалось где то на середине страницы
Видимо нет. Попробовал следующее: скопировал весь бб-код из верхнего сообщения, удалил его, создал новое сообщение со скопированным кодом (т.е. с настоящими датой/временем), прикрепил. В результате то же самое, переходит именно на 56 страницу из 62.
8. - 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
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. - 26 сентября 2013 — 18:59 - перейти к сообщению
1Bot пишет:
В коде используется функция ceil которая округляет в большую сторонукоторое задается в профиле у каждого пользователя
CODE:P = 1 + floor( N / n )
где функция floor() - округление в меньшую сторону
CODE:P = 1 + floor( N / n )
где функция floor() - округление в меньшую сторону
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
Посмотрите мои наработки http://exbb.info/community/topic...=6&topic=368
13. - 26 сентября 2013 — 19:11 - перейти к сообщению
1Bot пишет:
Я же говорю - невнимателен. Пропустил. Посмотрите на структуру файла с информацией о сообщениях темы в первом сообщении темы есть массив
Сейчас попробую реализовать предложенный вами алгоритм.
(Добавление)
CAB
Обязательно посмотрю и ваши наработки, но похоже уже завтра...
PS: а чего никто топикстартера не ткнул в темы, где эта проблема обсуждалась? Я думал это новый глюк, а оказывается это уже давняя головная боль.
14. CAB - 26 сентября 2013 — 19:32 - перейти к сообщению
NordWest пишет:
Лично у меня просто нет решений для ExBB FM 1.0 Final - те наработки для RC1, которые кому-то надо адаптировать для финала.
а чего никто топикстартера не ткнул в темы, где эта проблема обсуждалась? Я думал это новый глюк, а оказывается это уже давняя головная боль
15. - 26 сентября 2013 — 19:41 - перейти к сообщению
Ясно, попробую адаптировать в меру сил и возможностей.
(Добавление)
Применил только алгоритм предложенный 1Bot - вроде правильно работает.
Открываем файл forums.php в котором ищем
которую меняем кодом
Код вероятно не идеален. Скорее всего можно было проще получить количество прикреплённых постов, но главное что я так или иначе до этой цифры добрался.
У меня работает верно, но у меня форум крохотный и постов мало....
(Добавление)
Применил только алгоритм предложенный 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']));}
{
$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']));}
Код вероятно не идеален. Скорее всего можно было проще получить количество прикреплённых постов, но главное что я так или иначе до этой цифры добрался.
У меня работает верно, но у меня форум крохотный и постов мало....