Nette Documentation Preview

syntax
Paginator
*********

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


Namestitev:

```shell
composer require nette/utils
```

Ustvarimo objekt straničnika in mu nastavimo osnovne informacije:

```php
$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()`:

```php
$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.

```php
$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:

```php
$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()`:

```php
$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 |best-practices:pagination].

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.