Nette Documentation Preview

syntax
Paginator
*********

.[perex]
Potrzebujesz stronicować listy danych? Ponieważ matematyka stronicowania bywa podchwytliwa, z pomocą przychodzi [api:Nette\Utils\Paginator].


Instalacja:

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

Utwórzmy obiekt paginatora i ustawmy kilka podstawowych informacji:

```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // numer bieżącej strony
$paginator->setItemsPerPage(30); // liczba elementów na stronie
$paginator->setItemCount(356); // łączna liczba elementów (jeśli jest znana)
```

Strony numerowane są od 1. Możesz to zmienić metodą `setBase()`:

```php
$paginator->setBase(0); // numerowanie od 0
```

Obiekt udostępnia teraz wszystkie kluczowe informacje potrzebne do utworzenia elementów stronicowania. Możesz go na przykład przekazać do szablonu i tam z niego skorzystać.

```php
$paginator->isFirst(); // czy jesteśmy na pierwszej stronie?
$paginator->isLast(); // czy jesteśmy na ostatniej stronie?
$paginator->getPage(); // numer bieżącej strony
$paginator->getFirstPage(); // numer pierwszej strony
$paginator->getLastPage(); // numer ostatniej strony
$paginator->getFirstItemOnPage(); // numer kolejny pierwszego elementu na stronie
$paginator->getLastItemOnPage(); // numer kolejny ostatniego elementu na stronie
$paginator->getBase(); // podstawa numerowania stron (domyślnie 1)
$paginator->getPageCount(); // łączna liczba stron
$paginator->getItemsPerPage(); // liczba elementów na stronie
$paginator->getItemCount(); // łączna liczba elementów (jeśli jest znana)
```

Paginator pomaga w formułowaniu zapytań SQL. Metody `getLength()` i `getOffset()` zwracają wartości używane w klauzulach `LIMIT` i `OFFSET`:

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

Jeśli potrzebujesz stronicować w odwrotnej kolejności (czyli strona 1 odpowiada najwyższemu offsetowi), użyj `getCountdownOffset()`:

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

Przykład użycia w aplikacji znajdziesz w przepisie [Stronicowanie wyników z bazy danych|best-practices:pagination].

Paginator

Potrzebujesz stronicować listy danych? Ponieważ matematyka stronicowania bywa podchwytliwa, z pomocą przychodzi Nette\Utils\Paginator.

Instalacja:

composer require nette/utils

Utwórzmy obiekt paginatora i ustawmy kilka podstawowych informacji:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // numer bieżącej strony
$paginator->setItemsPerPage(30); // liczba elementów na stronie
$paginator->setItemCount(356); // łączna liczba elementów (jeśli jest znana)

Strony numerowane są od 1. Możesz to zmienić metodą setBase():

$paginator->setBase(0); // numerowanie od 0

Obiekt udostępnia teraz wszystkie kluczowe informacje potrzebne do utworzenia elementów stronicowania. Możesz go na przykład przekazać do szablonu i tam z niego skorzystać.

$paginator->isFirst(); // czy jesteśmy na pierwszej stronie?
$paginator->isLast(); // czy jesteśmy na ostatniej stronie?
$paginator->getPage(); // numer bieżącej strony
$paginator->getFirstPage(); // numer pierwszej strony
$paginator->getLastPage(); // numer ostatniej strony
$paginator->getFirstItemOnPage(); // numer kolejny pierwszego elementu na stronie
$paginator->getLastItemOnPage(); // numer kolejny ostatniego elementu na stronie
$paginator->getBase(); // podstawa numerowania stron (domyślnie 1)
$paginator->getPageCount(); // łączna liczba stron
$paginator->getItemsPerPage(); // liczba elementów na stronie
$paginator->getItemCount(); // łączna liczba elementów (jeśli jest znana)

Paginator pomaga w formułowaniu zapytań SQL. Metody getLength() i getOffset() zwracają wartości używane w klauzulach LIMIT i OFFSET:

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

Jeśli potrzebujesz stronicować w odwrotnej kolejności (czyli strona 1 odpowiada najwyższemu offsetowi), użyj getCountdownOffset():

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

Przykład użycia w aplikacji znajdziesz w przepisie Stronicowanie wyników z bazy danych.