LINUX.ORG.RU

[баг или фича]Количество страниц темы в Top 10

 


0

0

Имеется небольшой вроде-как-баг при подсчете в Top 10 («Наиболее обсуждаемые темы этого месяца») количества страниц комментариев в теме. Если при текущих настройках пользователя комментариев в теме набирается на n страниц под завязку, то будет указано, что в теме n+1 страниц.

Пример: «* GNOME выйдет из состава GNU Project? (стр. 20) (950)». У меня 50 комментов на страницу, так что должно быть 19. При изменении настроек то же возникает и с другими числами, как я выше написал.

Это баг или так и задумывалось (вроде как «сейчас пойдет 20-я страница»)?

★★★★★

top10.jsp стр 50:

        (стр. <a href="${fn:escapeXml(page_link)}">${message.pages+1}</a>)
TopTenBoxletImpl.java
   dto.setPages((int) Math.ceil(dto.getAnswers() / itemsPerPage));

Вот бага или фича это я не знаю :) но если поменять на

int tmp = dto.getAnswers();
dto.setPages(tmp/itemsPerPage+tmp%itemsPerPage);
и оставить только ${message.pages} то всё будет ок.

Хотя может это и фича

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

>${message.pages+1}

Видать, все-таки фича. По-моему, если просто сделать ${message.pages}, то все будет хорошо.

proud_anon ★★★★★
() автор топика
Ответ на: комментарий от proud_anon

нет. оно не будет писать последнюю страницу и ибо 201/50 = 40 =) В таком случае как щас, оно лажает только на кол-ве страниц кратном числу постов на странице ибо 201/50+1=40+1, но 200/50+1=41, что не верно. Этот неверный случай вылезает в 1/число-постов раз и на форуме на это может и можно забить (это не ко мне).

Соотв. правильный вариант (в посте выше я крупно налажал) надо n/50+(n%50!=0) в терминах C. Т.е. 201/50+(201%50!=0)=40+1=41, 200/50+(200%50!=0)=40+0=40.

так что это должно выглядеть как-то:

int tmp = dto.getAnswers()/itemsPerPage; 
if (tmp%itemsPerPage!=0) tmp++; 
dto.setPages(tmp); 

вот теперь правильно, хоть патч писать.

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

>ибо 201/50 = 40
Действительно, я не посмотрел, что там int-ы.

Ну, тогда можно сделать double'ы и не терять точности.

>if (tmp%itemsPerPage!=0) tmp++;
Ты хотел сказать if (dto.getAnswers()%itemsPerPage!=0) tmp++; ?

А то ты количество страниц на количество комментариев на странице поделил.

Итого, вариант 1:

dto.setPages((int) Math.ceil((double)dto.getAnswers() / itemsPerPage));

Или сразу itemsPerPage объявить double.

А если без Math.ceil'а, то:

int tmp = dto.getAnswers()/itemsPerPage;
if (dto.getAnswers()%itemsPerPage != 0) tmp++;
dto.setPages(tmp);

Так. Сейчас кто-нибудь fix for a patch for a commit пришлет...

proud_anon ★★★★★
() автор топика
Ответ на: комментарий от proud_anon

А, ну да, еще же можно предусмотреть фантастический случай выхода в Top-10 темы с 0 комментариев, в которой без доп. проверок будет в обоих случаях «Стр. 0»...

proud_anon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.