Nette Documentation Preview

syntax
Пагинатор
*********

.[perex]
Нужно разбить на страницы дамп данных? Поскольку математика пагинации может быть сложной, [api:Nette\Utils\Paginator] может помочь вам в этом.


Установка:

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

Создайте объект подкачки и задайте его основную информацию:

```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // номер текущей страницы
$paginator->setItemsPerPage(30); // количество элементов на странице
$paginator->setItemCount(356); // общее количество элементов, если известно
```

Страницы нумеруются с 1. Мы можем изменить это с помощью `setBase()`:

```php
$paginator->setBase(0); // нумерация с 0
```

Теперь объект будет предоставлять всю основную информацию, полезную при создании страницы подкачки. Например, вы можете передать его в шаблон и использовать его там.

```php
$paginator->isFirst(); // мы на первой странице?
$paginator->isLast(); // мы на последней странице?
$paginator->getPage(); // номер текущей страницы
$paginator->getFirstPage(); // номер первой страницы
$paginator->getLastPage(); // номер последней страницы
$paginator->getFirstItemOnPage(); // порядковый номер первого элемента на странице
$paginator->getLastItemOnPage(); // порядковый номер последнего элемента на странице
$paginator->getPageIndex(); // номер текущей страницы, нумерация от 0
$paginator->getPageCount(); // общее количество страниц
$paginator->getItemsPerPage(); // количество элементов на странице
$paginator->getItemCount(); // общее количество элементов, если известно
```

Конструктор страниц поможет в составлении SQL-запросов. Методы `getLength()` и `getOffset()` возвращают значения для использования в пунктах LIMIT и OFFSET:

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

Если нам нужно расположить страницы в обратном порядке, т.е. страница 1 соответствует самому высокому смещению, мы используем `getCountdownOffset()`:

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

Пример того, как использовать это в приложении, приведен в книге [Database Results Pagination |best-practices:pagination] Cookbook.

Пагинатор

Нужно разбить на страницы дамп данных? Поскольку математика пагинации может быть сложной, Nette\Utils\Paginator может помочь вам в этом.

Установка:

composer require nette/utils

Создайте объект подкачки и задайте его основную информацию:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // номер текущей страницы
$paginator->setItemsPerPage(30); // количество элементов на странице
$paginator->setItemCount(356); // общее количество элементов, если известно

Страницы нумеруются с 1. Мы можем изменить это с помощью setBase():

$paginator->setBase(0); // нумерация с 0

Теперь объект будет предоставлять всю основную информацию, полезную при создании страницы подкачки. Например, вы можете передать его в шаблон и использовать его там.

$paginator->isFirst(); // мы на первой странице?
$paginator->isLast(); // мы на последней странице?
$paginator->getPage(); // номер текущей страницы
$paginator->getFirstPage(); // номер первой страницы
$paginator->getLastPage(); // номер последней страницы
$paginator->getFirstItemOnPage(); // порядковый номер первого элемента на странице
$paginator->getLastItemOnPage(); // порядковый номер последнего элемента на странице
$paginator->getPageIndex(); // номер текущей страницы, нумерация от 0
$paginator->getPageCount(); // общее количество страниц
$paginator->getItemsPerPage(); // количество элементов на странице
$paginator->getItemCount(); // общее количество элементов, если известно

Конструктор страниц поможет в составлении SQL-запросов. Методы getLength() и getOffset() возвращают значения для использования в пунктах LIMIT и OFFSET:

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

Если нам нужно расположить страницы в обратном порядке, т.е. страница 1 соответствует самому высокому смещению, мы используем getCountdownOffset():

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

Пример того, как использовать это в приложении, приведен в книге Database Results Pagination Cookbook.