Nette Documentation Preview

syntax
Paginátor
*********

.[perex]
Egy adatlistát kell lapoznia? Mivel a lapozás mögött álló matematika trükkös lehet, a [api:Nette\Utils\Paginator] segít Önnek.


Telepítés:

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

Létrehozunk egy lapozó objektumot, és megadjuk az alapvető információkat:

```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // az aktuális oldal száma (1-től számozva)
$paginator->setItemsPerPage(30); // az oldalankénti rekordok száma
$paginator->setItemCount(356); // a rekordok teljes száma (ha van)
```

Ezt a `setBase()` segítségével tudjuk megváltoztatni:

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

Az objektum most már minden alapvető információt megad, ami egy paginátor létrehozásához hasznos. Átadhatjuk például egy sablonhoz, és ott használhatjuk.

```php
$paginator->isFirst(); // ez az első oldal?
$paginator->isLast(); // ez az utolsó oldal?
$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, ha 0-tól kezdődően számozódik.
$paginator->getPageCount(); // az oldalak száma összesen
$paginator->getItemsPerPage(); // az oldalankénti rekordok száma
$paginator->getItemCount(); // a rekordok teljes száma (ha van)
```

A paginátor segít az SQL-lekérdezés megfogalmazásában. A `getLength()` és a `getOffset()` metódusok visszaadják azokat az értékeket, amelyeket a LIMIT és OFFSET záradékokban használhat:

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

Ha fordított sorrendben kell paginálni, azaz az oldalszámot. Az 1. oldal a legnagyobb eltolásnak felel meg, akkor a `getCountdownOffset()` parancsot használhatja:

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

Az alkalmazásban való használatra példát az [Adatbázis-eredmények paginálása |best-practices:pagination] című szakácskönyvben talál.

Paginátor

Egy adatlistát kell lapoznia? Mivel a lapozás mögött álló matematika trükkös lehet, a Nette\Utils\Paginator segít Önnek.

Telepítés:

composer require nette/utils

Létrehozunk egy lapozó objektumot, és megadjuk az alapvető információkat:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // az aktuális oldal száma (1-től számozva)
$paginator->setItemsPerPage(30); // az oldalankénti rekordok száma
$paginator->setItemCount(356); // a rekordok teljes száma (ha van)

Ezt a setBase() segítségével tudjuk megváltoztatni:

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

Az objektum most már minden alapvető információt megad, ami egy paginátor létrehozásához hasznos. Átadhatjuk például egy sablonhoz, és ott használhatjuk.

$paginator->isFirst(); // ez az első oldal?
$paginator->isLast(); // ez az utolsó oldal?
$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, ha 0-tól kezdődően számozódik.
$paginator->getPageCount(); // az oldalak száma összesen
$paginator->getItemsPerPage(); // az oldalankénti rekordok száma
$paginator->getItemCount(); // a rekordok teljes száma (ha van)

A paginátor segít az SQL-lekérdezés megfogalmazásában. A getLength() és a getOffset() metódusok visszaadják azokat az értékeket, amelyeket a LIMIT és OFFSET záradékokban használhat:

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

Ha fordított sorrendben kell paginálni, azaz az oldalszámot. Az 1. oldal a legnagyobb eltolásnak felel meg, akkor a getCountdownOffset() parancsot használhatja:

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

Az alkalmazásban való használatra példát az Adatbázis-eredmények paginálása című szakácskönyvben talál.