Paginator

Aveți nevoie să paginați o listă de date? Deoarece matematica din spatele paginării poate fi complicată, Nette\Utils\Paginator vă va ajuta.

Instalare:

composer require nette/utils

Să creăm un obiect de paginare și să setăm informațiile de bază pentru acesta:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // numărul paginii curente (numerotat de la 1)
$paginator->setItemsPerPage(30); // numărul de înregistrări pe pagină
$paginator->setItemCount(356); // numărul total de înregistrări (dacă este disponibil)

Paginile sunt numerotate de la 1. Le putem schimba folosind setBase():

$paginator->setBase(0); // numerotate de la 0

Obiectul va furniza acum toate informațiile de bază utile în crearea unui paginator. Puteți, de exemplu, să-l treceți într-un șablon și să-l utilizați acolo.

$paginator->isFirst(); // Aceasta este prima pagină?
$paginator->isLast(); // Este ultima pagină?
$paginator->getPage(); // numărul paginii curente
$paginator->getFirstPage(); // numărul primei pagini
$paginator->getLastPage(); // numărul ultimei pagini
$paginator->getFirstItemOnPage(); // numărul secvențial al primului articol de pe pagină
$paginator->getLastItemOnPage(); // numărul de ordine al ultimului element de pe pagină
$paginator->getPageIndex(); // numărul paginii curente, dacă este numerotată de la 0
$paginator->getPageCount(); // numărul total de pagini
$paginator->getItemsPerPage(); // numărul de înregistrări pe pagină
$paginator->getItemCount(); // numărul total de înregistrări (dacă este disponibil)

Paginatorul va ajuta la formularea interogării SQL. Metodele getLength() și getOffset() returnează valorile pe care le puteți utiliza în clauzele LIMIT și OFFSET:

$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getOffset(),
);

Dacă aveți nevoie de paginare în ordine inversă, adică pagina nr. 1 corespunde celui mai mare decalaj, puteți utiliza 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