Paginator

Ali morate razdeliti izpis podatkov na strani? Ker je matematika straničenja lahko zapletena, vam bo pri tem pomagal Nette\Utils\Paginator.

Namestitev:

composer require nette/utils

Ustvarimo objekt straničnika in mu nastavimo osnovne informacije:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // številka trenutne strani
$paginator->setItemsPerPage(30); // število postavk na strani
$paginator->setItemCount(356); // skupno število postavk, če je znano

Strani se številčijo od 1. To lahko spremenimo z setBase():

$paginator->setBase(0); // številčimo od 0

Objekt zdaj ponuja vse osnovne informacije, uporabne pri ustvarjanju straničnika. Lahko ga na primer posredujete v predlogo in ga tam uporabite.

$paginator->isFirst(); // smo na prvi strani?
$paginator->isLast(); // smo na zadnji strani?
$paginator->getPage(); // številka trenutne strani
$paginator->getFirstPage(); // številka prve strani
$paginator->getLastPage(); // številka zadnje strani
$paginator->getFirstItemOnPage(); // zaporedna številka prve postavke na strani
$paginator->getLastItemOnPage(); // zaporedna številka zadnje postavke na strani
$paginator->getPageIndex(); // številka trenutne strani, številčena od 0
$paginator->getPageCount(); // skupno število strani
$paginator->getItemsPerPage(); // število postavk na stran
$paginator->getItemCount(); // skupno število postavk, če je znano

Straničnik pomaga pri oblikovanju SQL poizvedbe. Metodi getLength() in getOffset() vračata vrednosti, ki jih uporabimo v klavzulah LIMIT in OFFSET:

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

Če moramo straničiti v obratnem vrstnem redu, tj. stran št. 1 ustreza najvišjemu odmiku, uporabimo getCountdownOffset():

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

Primer uporabe v aplikaciji najdete v kuharski knjigi Straničenje rezultatov podatkovne baze.

različica: 4.0