Paginator
Potrebujete stran za seznam podatkov? Ker je matematika v ozadju paginacije lahko zapletena, vam bo pomagal Nette\Utils\Paginator.
Namestitev:
composer require nette/utils
Ustvarimo objekt za paging in mu določimo osnovne informacije:
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // številka trenutne strani (oštevilčena od 1).
$paginator->setItemsPerPage(30); // število zapisov na strani
$paginator->setItemCount(356); // skupno število zapisov (če je na voljo)
Stranke so oštevilčene od 1. To lahko spremenimo z uporabo setBase()
:
$paginator->setBase(0); // oštevilčeni od 0
Predmet bo zdaj vseboval vse osnovne informacije, ki so uporabne pri ustvarjanju paginatorja. Lahko ga na primer posredujete predlogi in ga tam uporabite.
$paginator->isFirst(); // je to prva stran?
$paginator->isLast(); // je to zadnja stran?
$paginator->getPage(); // številka trenutne strani
$paginator->getFirstPage(); // številka prve strani
$paginator->getLastPage(); // številka zadnje strani
$paginator->getFirstItemOnPage(); // zaporedna številka prvega elementa na strani
$paginator->getLastItemOnPage(); // zaporedna številka zadnjega elementa na strani
$paginator->getPageIndex(); // tekoča številka strani, če je oštevilčena od 0
$paginator->getPageCount(); // skupno število strani
$paginator->getItemsPerPage(); // število zapisov na stran
$paginator->getItemCount(); // skupno število zapisov (če je na voljo)
Paginator bo pomagal pri oblikovanju poizvedbe SQL. Metodi getLength()
in getOffset()
vrneta
vrednosti, ki jih lahko uporabite v stavkih LIMIT in OFFSET:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getOffset(),
);
Če želite paginirati v obratnem vrstnem redu, tj. stran št. 1 ustreza najvišjemu odmiku, lahko uporabite
getCountdownOffset()
:
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getCountdownOffset(),
);
Primer uporabe v aplikaciji je na voljo v kuharski knjigi Paginating Database Results.