Paginator
Потрібно розбити вивід даних на сторінки? Оскільки математика пагінації може бути підступною, вам допоможе Nette\Utils\Paginator.
Встановлення:
composer require nette/utils
Створимо об'єкт пагінатора та встановимо йому основну інформацію:
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // номер поточної сторінки
$paginator->setItemsPerPage(30); // кількість елементів на сторінці
$paginator->setItemCount(356); // загальна кількість елементів, якщо відома
Сторінки нумеруються з 1. Ми можемо змінити це за допомогою
setBase()
:
$paginator->setBase(0); // нумеруємо з 0
Об'єкт тепер надасть всю основну інформацію, корисну при створенні пагінатора. Ви можете, наприклад, передати його в шаблон і там використовувати.
$paginator->isFirst(); // ми на першій сторінці?
$paginator->isLast(); // ми на останній сторінці?
$paginator->getPage(); // номер поточної сторінки
$paginator->getFirstPage(); // номер першої сторінки
$paginator->getLastPage(); // номер останньої сторінки
$paginator->getFirstItemOnPage(); // порядковий номер першого елемента на сторінці
$paginator->getLastItemOnPage(); // порядковий номер останнього елемента на сторінці
$paginator->getPageIndex(); // номер поточної сторінки, нумерованої з 0
$paginator->getPageCount(); // загальна кількість сторінок
$paginator->getItemsPerPage(); // кількість елементів на сторінку
$paginator->getItemCount(); // загальна кількість елементів, якщо відома
Пагінатор допоможе при формулюванні SQL запиту. Методи getLength()
та getOffset()
повертають значення, які ми використаємо в клаузулах
LIMIT та OFFSET:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getOffset(),
);
Якщо потрібно розбити на сторінки у зворотному порядку, тобто
сторінка № 1 відповідає найбільшому зміщенню, використаємо
getCountdownOffset()
:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getCountdownOffset(),
);
Приклад використання в додатку знайдете в кулінарній книзі Пагінація результатів бази даних.