Пагінатор
Потрібно розбити на сторінки дамп даних? Оскільки математика пагінації може бути складною, 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(),
);
Приклад того, як використовувати це в додатку, наведено в книзі Database Results Pagination Cookbook.