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.