Nette Documentation Preview

syntax
Paginator
*********

.[perex]
Szüksége van az adatok listázásának lapozására? Mivel a lapozási matematika trükkös lehet, a [api:Nette\Utils\Paginator] segít ebben.


Telepítés:

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

Létrehozunk egy lapozó objektumot és beállítjuk az alapvető információkat:

```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // az aktuális oldal száma
$paginator->setItemsPerPage(30); // elemek száma oldalanként
$paginator->setItemCount(356); // az elemek teljes száma, ha ismert
```

Az oldalak 1-től vannak számozva. Ezt megváltoztathatjuk a `setBase()` segítségével:

```php
$paginator->setBase(0); // 0-tól számozunk
```

Az objektum most minden alapvető információt megad, ami hasznos a lapozó létrehozásakor. Például átadhatja egy sablonnak és ott felhasználhatja.

```php
$paginator->isFirst(); // az első oldalon vagyunk?
$paginator->isLast(); // az utolsó oldalon vagyunk?
$paginator->getPage(); // az aktuális oldal száma
$paginator->getFirstPage(); // az első oldal száma
$paginator->getLastPage(); // az utolsó oldal száma
$paginator->getFirstItemOnPage(); // az oldalon lévő első elem sorszáma
$paginator->getLastItemOnPage(); // az oldalon lévő utolsó elem sorszáma
$paginator->getPageIndex(); // az aktuális oldal száma 0-tól számozva
$paginator->getPageCount(); // az oldalak teljes száma
$paginator->getItemsPerPage(); // elemek száma oldalanként
$paginator->getItemCount(); // az elemek teljes száma, ha ismert
```

A lapozó segít az SQL lekérdezés megfogalmazásában. A `getLength()` és `getOffset()` metódusok olyan értékeket adnak vissza, amelyeket a LIMIT és OFFSET klauzulákban használhatunk:

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

Ha fordított sorrendben kell lapoznunk, azaz az 1. oldal a legmagasabb offsetnek felel meg, használjuk a `getCountdownOffset()` metódust:

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

Alkalmazásbeli használati példát a [Adatbázis eredmények lapozása |best-practices:pagination] szakácskönyvben talál.

Paginator

Szüksége van az adatok listázásának lapozására? Mivel a lapozási matematika trükkös lehet, a Nette\Utils\Paginator segít ebben.

Telepítés:

composer require nette/utils

Létrehozunk egy lapozó objektumot és beállítjuk az alapvető információkat:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // az aktuális oldal száma
$paginator->setItemsPerPage(30); // elemek száma oldalanként
$paginator->setItemCount(356); // az elemek teljes száma, ha ismert

Az oldalak 1-től vannak számozva. Ezt megváltoztathatjuk a setBase() segítségével:

$paginator->setBase(0); // 0-tól számozunk

Az objektum most minden alapvető információt megad, ami hasznos a lapozó létrehozásakor. Például átadhatja egy sablonnak és ott felhasználhatja.

$paginator->isFirst(); // az első oldalon vagyunk?
$paginator->isLast(); // az utolsó oldalon vagyunk?
$paginator->getPage(); // az aktuális oldal száma
$paginator->getFirstPage(); // az első oldal száma
$paginator->getLastPage(); // az utolsó oldal száma
$paginator->getFirstItemOnPage(); // az oldalon lévő első elem sorszáma
$paginator->getLastItemOnPage(); // az oldalon lévő utolsó elem sorszáma
$paginator->getPageIndex(); // az aktuális oldal száma 0-tól számozva
$paginator->getPageCount(); // az oldalak teljes száma
$paginator->getItemsPerPage(); // elemek száma oldalanként
$paginator->getItemCount(); // az elemek teljes száma, ha ismert

A lapozó segít az SQL lekérdezés megfogalmazásában. A getLength() és getOffset() metódusok olyan értékeket adnak vissza, amelyeket a LIMIT és OFFSET klauzulákban használhatunk:

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

Ha fordított sorrendben kell lapoznunk, azaz az 1. oldal a legmagasabb offsetnek felel meg, használjuk a getCountdownOffset() metódust:

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

Alkalmazásbeli használati példát a Adatbázis eredmények lapozása szakácskönyvben talál.