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.