Paginator

Potrzebujesz stronicować listę danych? Ponieważ matematyka stronicowania bywa podstępna, pomoże ci w tym Nette\Utils\Paginator.

Instalacja:

composer require nette/utils

Tworzymy obiekt paginatora i ustawiamy mu podstawowe informacje:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // numer bieżącej strony
$paginator->setItemsPerPage(30); // liczba elementów na stronie
$paginator->setItemCount(356); // całkowita liczba elementów, jeśli jest znana

Strony są numerowane od 1. Możemy to zmienić za pomocą setBase():

$paginator->setBase(0); // numerujemy od 0

Obiekt teraz dostarczy wszystkich podstawowych informacji przydatnych przy tworzeniu paginatora. Możesz go na przykład przekazać do szablonu i tam go wykorzystać.

$paginator->isFirst(); // jesteśmy na pierwszej stronie?
$paginator->isLast(); // jesteśmy na ostatniej stronie?
$paginator->getPage(); // numer bieżącej strony
$paginator->getFirstPage(); // numer pierwszej strony
$paginator->getLastPage(); // numer ostatniej strony
$paginator->getFirstItemOnPage(); // numer porządkowy pierwszego elementu na stronie
$paginator->getLastItemOnPage(); // numer porządkowy ostatniego elementu na stronie
$paginator->getPageIndex(); // numer bieżącej strony numerowany od 0
$paginator->getPageCount(); // całkowita liczba stron
$paginator->getItemsPerPage(); // liczba elementów na stronie
$paginator->getItemCount(); // całkowita liczba elementów, jeśli jest znana

Paginator pomoże przy formułowaniu zapytania SQL. Metody getLength() i getOffset() zwracają wartości, które użyjemy w klauzulach LIMIT i OFFSET:

$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getOffset(),
);

Jeśli potrzebujemy stronicować w odwrotnej kolejności, tj. strona nr 1 odpowiada najwyższemu offsetowi, użyjemy getCountdownOffset():

$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getCountdownOffset(),
);

Przykład użycia w aplikacji znajdziesz w książce kucharskiej Stronicowanie wyników bazy danych.

wersja: 4.0