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.