Nette Documentation Preview

syntax
Paginator
*********

.[perex]
Potrzebujesz paginować zrzut danych? Ponieważ matematyka paginacji może być skomplikowana, [api:Nette\Utils\Paginator] może ci w tym pomóc.


Instalacja:

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

Utwórz obiekt stronicowania i ustaw jego podstawowe informacje:

```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // aktualny numer strony
$paginator->setItemsPerPage(30); // ilość elementów na stronie
$paginator->setItemCount(356); // całkowita liczba elementów, jeśli jest znana
```

Strony są numerowane od 1. Możemy to zmienić używając `setBase()`:

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

Obiekt będzie teraz dostarczał wszystkich podstawowych informacji przydatnych podczas tworzenia strony stronicowania. Na przykład możesz przekazać go do szablonu i użyć go tam.

```php
$paginator->isFirst(); // czy jesteśmy na pierwszej stronie?
$paginator->isLast(); // czy jesteśmy na ostatniej stronie?
$paginator->getPage(); // aktualny numer strony
$paginator->getFirstPage(); // numer pierwszej strony
$paginator->getLastPage(); // numer ostatniej strony
$paginator->getFirstItemOnPage(); // numer kolejny pierwszego elementu na stronie
$paginator->getLastItemOnPage(); // numer porządkowy ostatniego elementu na stronie
$paginator->getPageIndex(); // numer bieżącej strony numerowany od 0
$paginator->getPageCount(); // całkowita liczba stron
$paginator->getItemsPerPage(); // ilość elementów na stronie
$paginator->getItemCount(); // całkowita liczba elementów, jeśli jest znana
```

Konstruktor stron pomoże w formułowaniu zapytań SQL. Metody `getLength()` i `getOffset()` zwracają wartości do wykorzystania w klauzulach LIMIT i OFFSET:

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

Jeśli potrzebujemy paginować w odwrotnej kolejności, tzn. strona 1 odpowiada najwyższemu offsetowi, używamy `getCountdownOffset()`:

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

Zobacz [Database Results Pagination |best-practices:pagination] Cookbook, aby zobaczyć przykład, jak użyć tego w aplikacji.

Paginator

Potrzebujesz paginować zrzut danych? Ponieważ matematyka paginacji może być skomplikowana, Nette\Utils\Paginator może ci w tym pomóc.

Instalacja:

composer require nette/utils

Utwórz obiekt stronicowania i ustaw jego podstawowe informacje:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // aktualny numer strony
$paginator->setItemsPerPage(30); // ilość elementów na stronie
$paginator->setItemCount(356); // całkowita liczba elementów, jeśli jest znana

Strony są numerowane od 1. Możemy to zmienić używając setBase():

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

Obiekt będzie teraz dostarczał wszystkich podstawowych informacji przydatnych podczas tworzenia strony stronicowania. Na przykład możesz przekazać go do szablonu i użyć go tam.

$paginator->isFirst(); // czy jesteśmy na pierwszej stronie?
$paginator->isLast(); // czy jesteśmy na ostatniej stronie?
$paginator->getPage(); // aktualny numer strony
$paginator->getFirstPage(); // numer pierwszej strony
$paginator->getLastPage(); // numer ostatniej strony
$paginator->getFirstItemOnPage(); // numer kolejny pierwszego elementu na stronie
$paginator->getLastItemOnPage(); // numer porządkowy ostatniego elementu na stronie
$paginator->getPageIndex(); // numer bieżącej strony numerowany od 0
$paginator->getPageCount(); // całkowita liczba stron
$paginator->getItemsPerPage(); // ilość elementów na stronie
$paginator->getItemCount(); // całkowita liczba elementów, jeśli jest znana

Konstruktor stron pomoże w formułowaniu zapytań SQL. Metody getLength() i getOffset() zwracają wartości do wykorzystania w klauzulach LIMIT i OFFSET:

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

Jeśli potrzebujemy paginować w odwrotnej kolejności, tzn. strona 1 odpowiada najwyższemu offsetowi, używamy getCountdownOffset():

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

Zobacz Database Results Pagination Cookbook, aby zobaczyć przykład, jak użyć tego w aplikacji.