Paginator

Avete bisogno di paginare elenchi di dati? Poiché la matematica della paginazione può essere insidiosa, Nette\Utils\Paginator è qui per aiutarvi.

Installazione:

composer require nette/utils

Creiamo un oggetto paginator e impostiamo alcune 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. Potete cambiarlo con setBase():

$paginator->setBase(0); // numera da 0

L'oggetto offre ora tutte le informazioni essenziali per creare i controlli di paginazione. Potete per esempio passarlo a un template e usarlo 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 progressivo del primo elemento della pagina
$paginator->getLastItemOnPage(); // numero progressivo dell'ultimo elemento della pagina
$paginator->getBase(); // base della numerazione delle pagine (di norma 1)
$paginator->getPageCount(); // numero totale di pagine
$paginator->getItemsPerPage(); // numero di elementi per pagina
$paginator->getItemCount(); // numero totale di elementi (se noto)

Il paginator aiuta a formulare le query SQL. I metodi getLength() e getOffset() restituiscono i valori usati nelle clausole LIMIT e OFFSET:

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

Se avete bisogno di paginare in ordine inverso (cioè la pagina 1 corrisponde all'offset più alto), usate getCountdownOffset():

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

Un esempio d'uso in un'applicazione si trova nella ricetta Paginare i risultati del database.

versione: 4.x