Paginator
Szüksége van az adatok listázásának lapozására? Mivel a lapozási matematika trükkös lehet, a Nette\Utils\Paginator segít ebben.
Telepítés:
composer require nette/utils Létrehozunk egy lapozó objektumot és beállítjuk az alapvető információkat:
$paginator = new Nette\Utils\Paginator; $paginator->setPage(1); // az aktuális oldal száma $paginator->setItemsPerPage(30); // elemek száma oldalanként $paginator->setItemCount(356); // az elemek teljes száma, ha ismert Az oldalak 1-től vannak számozva. Ezt megváltoztathatjuk a setBase() segítségével:
$paginator->setBase(0); // 0-tól számozunk Az objektum most minden alapvető információt megad, ami hasznos a lapozó létrehozásakor. Például átadhatja egy sablonnak és ott felhasználhatja.
$paginator->isFirst(); // az első oldalon vagyunk? $paginator->isLast(); // az utolsó oldalon vagyunk? $paginator->getPage(); // az aktuális oldal száma $paginator->getFirstPage(); // az első oldal száma $paginator->getLastPage(); // az utolsó oldal száma $paginator->getFirstItemOnPage(); // az oldalon lévő első elem sorszáma $paginator->getLastItemOnPage(); // az oldalon lévő utolsó elem sorszáma $paginator->getPageIndex(); // az aktuális oldal száma 0-tól számozva $paginator->getPageCount(); // az oldalak teljes száma $paginator->getItemsPerPage(); // elemek száma oldalanként $paginator->getItemCount(); // az elemek teljes száma, ha ismert A lapozó segít az SQL lekérdezés megfogalmazásában. A getLength() és getOffset() metódusok olyan értékeket adnak vissza, amelyeket a LIMIT és OFFSET klauzulákban használhatunk:
$result = $database->query( 'SELECT * FROM items LIMIT ? OFFSET ?', $paginator->getLength(), $paginator->getOffset(), ); Ha fordított sorrendben kell lapoznunk, azaz az 1. oldal a legmagasabb offsetnek felel meg, használjuk a getCountdownOffset() metódust:
$result = $database->query( 'SELECT * FROM items LIMIT ? OFFSET ?', $paginator->getLength(), $paginator->getCountdownOffset(), ); Alkalmazásbeli használati példát a Adatbázis eredmények lapozása szakácskönyvben talál.