Paginatore

Avete bisogno di impaginare un elenco di dati? Poiché la matematica che sta dietro alla paginazione può essere complicata, Nette\Utils\Paginator vi aiuterà.

Installazione:

composer require nette/utils

Creiamo un oggetto di paginazione e impostiamo le informazioni di base:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // il numero della pagina corrente (numerata a partire da 1)
$paginator->setItemsPerPage(30); // il numero di record per pagina
$paginator->setItemCount(356); // il numero totale di record (se disponibile)

Le pagine sono numerate a partire da 1. Possiamo cambiarle usando setBase():

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

L'oggetto fornirà ora tutte le informazioni di base utili per creare un paginatore. È possibile, ad esempio, passarlo a un template e utilizzarlo lì.

$paginator->isFirst(); // è la prima pagina?
$paginator->isLast(); // è l'ultima pagina?
$paginator->getPage(); // numero di pagina attuale
$paginator->getFirstPage(); // il numero della prima pagina
$paginator->getLastPage(); // il numero dell'ultima pagina
$paginator->getFirstItemOnPage(); // numero di sequenza del primo elemento della pagina
$paginator->getLastItemOnPage(); // numero di sequenza dell'ultimo elemento della pagina
$paginator->getPageIndex(); // numero della pagina corrente, se numerata a partire da 0
$paginator->getPageCount(); // il numero totale di pagine
$paginator->getItemsPerPage(); // il numero di record per pagina
$paginator->getItemCount(); // il numero totale di record (se disponibile)

Il paginatore aiuterà a formulare la query SQL. I metodi getLength() e getOffset() restituiscono i valori che possono essere utilizzati nelle clausole LIMIT e OFFSET:

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

Se si desidera effettuare la paginazione in ordine inverso, ossia che la pagina n. 1 corrisponda all'offset più alto, si può utilizzare il metodo . 1 corrisponde all'offset più alto, si può utilizzare il metodo getCountdownOffset():

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

Un esempio di utilizzo nell'applicazione si trova nel ricettario Paginazione dei risultati del database.

versione: 4.0