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(),
);

Пример за използване в приложение можете да намерите в готварската книга Странициране на резултати от база данни.