Paginator
Avete bisogno di impaginare un elenco di dati? Poiché la matematica della paginazione può essere insidiosa, Nette\Utils\Paginator vi aiuterà.
Installazione:
composer require nette/utils
Creiamo un oggetto paginator e impostiamo le informazioni di base:
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // numero della pagina corrente
$paginator->setItemsPerPage(30); // numero di elementi per pagina
$paginator->setItemCount(356); // numero totale di elementi, se noto
Le pagine sono numerate a partire da 1. Possiamo cambiarlo usando setBase()
:
$paginator->setBase(0); // numeriamo da 0
L'oggetto ora fornirà tutte le informazioni di base utili per la creazione di un paginator. Potete, ad esempio, passarlo a un template e utilizzarlo lì.
$paginator->isFirst(); // siamo sulla prima pagina?
$paginator->isLast(); // siamo sull'ultima pagina?
$paginator->getPage(); // numero della pagina corrente
$paginator->getFirstPage(); // numero della prima pagina
$paginator->getLastPage(); // numero dell'ultima pagina
$paginator->getFirstItemOnPage(); // numero ordinale del primo elemento sulla pagina
$paginator->getLastItemOnPage(); // numero ordinale dell'ultimo elemento sulla pagina
$paginator->getPageIndex(); // numero della pagina corrente numerata da 0 (indice)
$paginator->getPageCount(); // numero totale di pagine
$paginator->getItemsPerPage(); // numero di elementi per pagina
$paginator->getItemCount(); // numero totale di elementi, se noto
Il paginator aiuta nella formulazione di una query SQL. I metodi getLength()
e getOffset()
restituiscono valori che utilizziamo nelle clausole LIMIT e OFFSET:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getOffset(),
);
Se abbiamo bisogno di impaginare in ordine inverso, ovvero la pagina n. 1 corrisponde all'offset più alto, utilizziamo
getCountdownOffset()
:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getCountdownOffset(),
);
Un esempio di utilizzo nell'applicazione si trova nel cookbook Paginazione dei risultati del database.