Paginador

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.

versão: 4.0