Пагінатор

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

версію: 4.0