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.

versiune: 4.0