Paginator

¿Necesita paginar listados de datos? Como las matemáticas de la paginación pueden ser peliagudas, Nette\Utils\Paginator está aquí para ayudarle.

Instalación:

composer require nette/utils

Creemos un objeto paginador y fijemos algunos datos básicos:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // número de la página actual
$paginator->setItemsPerPage(30); // número de elementos por página
$paginator->setItemCount(356); // número total de elementos (si se conoce)

Las páginas se numeran a partir de 1. Puede cambiarlo con setBase():

$paginator->setBase(0); // numeración desde 0

El objeto ofrece ahora toda la información esencial para crear los controles de paginación. Puede pasarlo, por ejemplo, a una plantilla y usarlo allí.

$paginator->isFirst(); // ¿estamos en la primera página?
$paginator->isLast(); // ¿estamos en la última página?
$paginator->getPage(); // número de la página actual
$paginator->getFirstPage(); // número de la primera página
$paginator->getLastPage(); // número de la última página
$paginator->getFirstItemOnPage(); // número de orden del primer elemento de la página
$paginator->getLastItemOnPage(); // número de orden del último elemento de la página
$paginator->getBase(); // base de numeración de las páginas (1 de forma predeterminada)
$paginator->getPageCount(); // número total de páginas
$paginator->getItemsPerPage(); // número de elementos por página
$paginator->getItemCount(); // número total de elementos (si se conoce)

El paginador ayuda a formular las consultas SQL. Los métodos getLength() y getOffset() devuelven los valores que se usan en las cláusulas LIMIT y OFFSET:

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

Si necesita paginar en orden inverso (es decir, que la página 1 corresponda al desplazamiento más alto), use getCountdownOffset():

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

Encontrará un ejemplo de uso en una aplicación en la receta Paginar los resultados de la base de datos.

versión: 4.x