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.