Paginator

¿Necesita paginar la salida de datos? Dado que las matemáticas de paginación pueden ser complicadas, Nette\Utils\Paginator le ayudará con eso.

Instalación:

composer require nette/utils

Creamos un objeto paginador y le establecemos la información básica:

$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 desde 1. Podemos cambiar esto usando setBase():

$paginator->setBase(0); // numeramos desde 0

El objeto ahora proporciona toda la información básica útil para crear un paginador. Puede pasarlo a una plantilla, por ejemplo, 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 secuencia del primer elemento en la página
$paginator->getLastItemOnPage(); // número de secuencia del último elemento en la página
$paginator->getPageIndex(); // número de la página actual numerado desde 0
$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 una consulta SQL. Los métodos getLength() y getOffset() devuelven valores que usamos en las cláusulas LIMIT y OFFSET:

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

Si necesitamos paginar en orden inverso, es decir, la página n.º 1 corresponde al offset más alto, usamos getCountdownOffset():

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

Puede encontrar un ejemplo de uso en la aplicación en el libro de cocina Paginación de resultados de base de datos.

versión: 4.0