Paginator
Aveți nevoie să paginați afișarea datelor? Deoarece matematica paginării poate fi înșelătoare, Nette\Utils\Paginator vă poate 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 implicit de la 1. Putem schimba acest lucru folosind setBase()
:
$paginator->setBase(0); // numerotăm paginile de la 0
Obiectul oferă acum toate informațiile de bază utile la crearea unui sistem de paginare. 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(); // indexul paginii curente (bazat pe 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ărilor 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(), // Echivalent cu ItemsPerPage
$paginator->getOffset(),
);
Dacă trebuie să paginăm în ordine inversă (de exemplu, ultimele înregistrări primele), unde pagina 1 corespunde celui
mai mare offset, folosim getCountdownOffset()
:
$result = $database->query(
'SELECT * FROM items ORDER BY id DESC LIMIT ? OFFSET ?', // Exemplu cu sortare desc
$paginator->getLength(),
$paginator->getCountdownOffset(),
);
Un exemplu de utilizare în aplicație poate fi găsit în cookbook-ul Paginarea rezultatelor bazei de date.