Nette Documentation Preview

syntax
Paginator
*********

.[perex]
Precisa paginar a exibição de dados? Como a matemática de paginação pode ser complicada, [api:Nette\Utils\Paginator] irá ajudá-lo com isso.


Instalação:

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

Criamos um objeto paginador e definimos suas informações básicas:

```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // número da página atual
$paginator->setItemsPerPage(30); // número de itens por página
$paginator->setItemCount(356); // número total de itens, se conhecido
```

As páginas são numeradas a partir de 1. Podemos alterar isso usando `setBase()`:

```php
$paginator->setBase(0); // numeramos a partir de 0
```

O objeto agora fornecerá todas as informações básicas úteis ao criar um paginador. Você pode, por exemplo, passá-lo para um template e usá-lo lá.

```php
$paginator->isFirst(); // estamos na primeira página?
$paginator->isLast(); // estamos na última página?
$paginator->getPage(); // número da página atual
$paginator->getFirstPage(); // número da primeira página
$paginator->getLastPage(); // número da última página
$paginator->getFirstItemOnPage(); // número de série do primeiro item na página
$paginator->getLastItemOnPage(); // número de série do último item na página
$paginator->getPageIndex(); // número da página atual numerado a partir de 0
$paginator->getPageCount(); // número total de páginas
$paginator->getItemsPerPage(); // número de itens por página
$paginator->getItemCount(); // número total de itens, se conhecido
```

O paginador ajuda na formulação de consultas SQL. Os métodos `getLength()` e `getOffset()` retornam valores que usamos nas cláusulas LIMIT e OFFSET:

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

Se precisarmos paginar na ordem inversa, ou seja, a página nº 1 corresponde ao maior offset, usamos `getCountdownOffset()`:

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

Um exemplo de uso em uma aplicação pode ser encontrado no cookbook [Paginação de resultados do banco de dados |best-practices:pagination].

Paginator

Precisa paginar a exibição de dados? Como a matemática de paginação pode ser complicada, Nette\Utils\Paginator irá ajudá-lo com isso.

Instalação:

composer require nette/utils

Criamos um objeto paginador e definimos suas informações básicas:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // número da página atual
$paginator->setItemsPerPage(30); // número de itens por página
$paginator->setItemCount(356); // número total de itens, se conhecido

As páginas são numeradas a partir de 1. Podemos alterar isso usando setBase():

$paginator->setBase(0); // numeramos a partir de 0

O objeto agora fornecerá todas as informações básicas úteis ao criar um paginador. Você pode, por exemplo, passá-lo para um template e usá-lo lá.

$paginator->isFirst(); // estamos na primeira página?
$paginator->isLast(); // estamos na última página?
$paginator->getPage(); // número da página atual
$paginator->getFirstPage(); // número da primeira página
$paginator->getLastPage(); // número da última página
$paginator->getFirstItemOnPage(); // número de série do primeiro item na página
$paginator->getLastItemOnPage(); // número de série do último item na página
$paginator->getPageIndex(); // número da página atual numerado a partir de 0
$paginator->getPageCount(); // número total de páginas
$paginator->getItemsPerPage(); // número de itens por página
$paginator->getItemCount(); // número total de itens, se conhecido

O paginador ajuda na formulação de consultas SQL. Os métodos getLength() e getOffset() retornam valores que usamos nas cláusulas LIMIT e OFFSET:

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

Se precisarmos paginar na ordem inversa, ou seja, a página nº 1 corresponde ao maior offset, usamos getCountdownOffset():

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

Um exemplo de uso em uma aplicação pode ser encontrado no cookbook Paginação de resultados do banco de dados.