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.

versione: 4.0