Я работаю над функцией разбивки на страницы в веб-сервисе, который я пишу, но мое отсутствие математического понимания сейчас убивает меня. У меня есть пара ключей: totalItems
, totalItems
, totalItems
, totalPages
, но также несколько ссылок на first
, last
, previous
и next
.
В этот момент я делаю следующие вычисления:
totalItems
: количество строк в таблице currentItems
: параметр limit
из HTTP-запроса currentPage
: start
параметр, деленный на limit
параметр totalPages
: количество строк в таблице, деленное на limit
. (Округленное вверх, 8.1 страница = 9 страниц) Я предполагаю, что эти вычисления правильные, с чем я борюсь, является следующее:
first
: start
параметр равен 1 с limit
от HTTP-запроса last
: должен быть первый элемент последней страницы, как я могу рассчитать это правильно? previous
: должен быть первый элемент предыдущей страницы, как мне это сделать? next
: должен быть первый элемент следующей страницы, как мне это сделать? Я бы хотел спросить: правильно ли мои вычисления? И как мне решить три проблемы с last
, previous
и next
?
Если вы работаете с mysql
LIMIT offset, items_per_page
Для расчета смещения u можете использовать
$offset = ($page - 1) * $items_per_page;
Затем замените $page
.
Последний
$last_offset = ($totalPages - 1) * $items_per_page;
предыдущий
$previous_offset = (($currentPage - 1) - 1) * $items_per_page;
следующий
$next_offset = (($currentPage + 1) - 1) * $items_per_page;
РЕДАКТИРОВАТЬ :
if ($previous_offset > 0) echo '<a href="?start='.$previous_offset.'&limit='.$items_per_page.'>prev</a>'; if ($next_offset <= $totalPages * $items_per_page) echo '<a href="?start='.$next_offset.'&limit='.$items_per_page.'">prev</a>';
Если для ограничения вы ссылаетесь на количество элементов на странице, то:
currentItems: same as limit currentPage: floor(start / limit) totalPages: ceil(totalItems / limit) last: totalPages * limit previous: (currentPage-1 // Should be greater or equal to 0) * limit next: (currentPage+1 // Should be less or equal than totalPages) * limit
Я просто приблизился …