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.