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.