Paginator
Aveți nevoie să paginați afișarea datelor? Deoarece matematica paginării poate fi înșelătoare, Nette\Utils\Paginator vă va ajuta.
Instalare:
composer require nette/utils
Creăm un obiect paginator și îi setăm informațiile de bază:
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // numărul paginii curente
$paginator->setItemsPerPage(30); // numărul de elemente pe pagină
$paginator->setItemCount(356); // numărul total de elemente, dacă este cunoscut
Paginile sunt numerotate de la 1. Putem schimba acest lucru folosind setBase()
:
$paginator->setBase(0); // numerotăm de la 0
Obiectul oferă acum toate informațiile de bază utile la crearea unui paginator. Puteți, de exemplu, să îl transmiteți unui șablon și să îl utilizați acolo.
$paginator->isFirst(); // suntem pe prima pagină?
$paginator->isLast(); // suntem pe ultima pagină?
$paginator->getPage(); // numărul paginii curente
$paginator->getFirstPage(); // numărul primei pagini
$paginator->getLastPage(); // numărul ultimei pagini
$paginator->getFirstItemOnPage(); // numărul de ordine al primului element de pe pagină
$paginator->getLastItemOnPage(); // numărul de ordine al ultimului element de pe pagină
$paginator->getPageIndex(); // numărul paginii curente numerotate de la 0
$paginator->getPageCount(); // numărul total de pagini
$paginator->getItemsPerPage(); // numărul de elemente pe pagină
$paginator->getItemCount(); // numărul total de elemente, dacă este cunoscut
Paginatorul ajută la formularea interogării SQL. Metodele getLength()
și getOffset()
returnează
valorile pe care le vom folosi în clauzele LIMIT și OFFSET:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getOffset(),
);
Dacă trebuie să paginăm în ordine inversă, adică pagina nr. 1 corespunde celui mai mare offset, folosim
getCountdownOffset()
:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getCountdownOffset(),
);
Un exemplu de utilizare în aplicație poate fi găsit în cartea de bucate Paginarea rezultatelor bazei de date.