Paginator

Potrzebujesz paginować zrzut danych? Ponieważ matematyka paginacji może być skomplikowana, Nette\Utils\Paginator może ci w tym pomóc.

Instalacja:

composer require nette/utils

Utwórz obiekt stronicowania i ustaw jego podstawowe informacje:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // aktualny numer strony
$paginator->setItemsPerPage(30); // ilość 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ć używając setBase():

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

Obiekt będzie teraz dostarczał wszystkich podstawowych informacji przydatnych podczas tworzenia strony stronicowania. Na przykład możesz przekazać go do szablonu i użyć go tam.

$paginator->isFirst(); // czy jesteśmy na pierwszej stronie?
$paginator->isLast(); // czy jesteśmy na ostatniej stronie?
$paginator->getPage(); // aktualny numer strony
$paginator->getFirstPage(); // numer pierwszej strony
$paginator->getLastPage(); // numer ostatniej strony
$paginator->getFirstItemOnPage(); // numer kolejny 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(); // ilość elementów na stronie
$paginator->getItemCount(); // całkowita liczba elementów, jeśli jest znana

Konstruktor stron pomoże w formułowaniu zapytań SQL. Metody getLength() i getOffset() zwracają wartości do wykorzystania w klauzulach LIMIT i OFFSET:

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

Jeśli potrzebujemy paginować w odwrotnej kolejności, tzn. strona 1 odpowiada najwyższemu offsetowi, używamy getCountdownOffset():

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

Zobacz Database Results Pagination Cookbook, aby zobaczyć przykład, jak użyć tego w aplikacji.

wersja: 4.0