En este primer ejemplo no haremos nada espectacular, pero esperamos que
le dé una buena idea de lo que Zend_Paginator está diseñado para hacer.
Supongamos que tenemos un array llamado $data con los números del 1 al 100, que
queremos dividir en varias páginas. Podemos usar el método estático
factory() de la clase Zend_Paginator
para obtener un objeto Zend_Paginator con nuestro array.
// Create an array with numbers 1 to 100 $data = range(1, 100); // Get a Paginator object using Zend_Paginator's built-in factory. $paginator = Zend_Paginator::factory($data);
¡Ya casi hemos terminado! La variable $paginator ahora contiene una referencia al objeto Paginator. Por defecto está configurado para mostrar 10 elementos por página. Para mostrar los elementos de la página actualmente activa, todo lo que necesita hacer es iterar sobre el objeto Paginator con un bucle foreach. La página actualmente activa por defecto es la primera página si no se especifica explícitamente. Veremos más adelante cómo puede seleccionar una página específica. El siguiente fragmento mostrará una lista no ordenada que contiene los números del 1 al 10, que son los números de la primera página.
// Create an array with numbers 1 to 100
$data = range(1, 100);
// Get a Paginator object using Zend_Paginator's built-in factory.
$paginator = Zend_Paginator::factory($data);
?><ul><?php
// Render each item for the current page in a list-item
foreach ($paginator as $item) {
echo '<li>' . $item . '</li>';
}
?></ul>
Ahora intentemos renderizar los elementos de la segunda página. Puede usar el
método setCurrentPageNumber() para seleccionar qué página desea
ver.
// Create an array with numbers 1 to 100
$data = range(1, 100);
// Get a Paginator object using Zend_Paginator's built-in factory.
$paginator = Zend_Paginator::factory($data);
// Select the second page
$paginator->setCurrentPageNumber(2);
?><ul><?php
// Render each item for the current page in a list-item
foreach ($paginator as $item) {
echo '<li>' . $item . '</li>';
}
?></ul>
Como era de esperar, este pequeño fragmento renderizará una lista no ordenada con los números del 11 al 20.
Estos ejemplos simples demuestran una pequeña parte de lo que se puede lograr con
Zend_Paginator. Sin embargo, una aplicación real rara vez lee sus datos
de un array plano, por lo que la siguiente sección está dedicada a mostrarle cómo puede usar
Paginator para paginar los resultados de una consulta a base de datos. Antes de continuar leyendo, asegúrese de estar
familiarizado con la forma en que funciona Zend_Db_Select.
En los ejemplos de base de datos veremos una tabla con entradas de blog llamada 'posts'. La tabla 'posts' tiene cuatro columnas: id, title, body, date_created. Vayamos directamente a ver un ejemplo simple.
// Create a select query. $db is a Zend_Db_Adapter object, which we assume
// already exists in your script.
$select = $db->select()->from('posts')->order('date_created DESC');
// Get a Paginator object using Zend_Paginator's built-in factory.
$paginator = Zend_Paginator::factory($select);
// Select the second page
$paginator->setCurrentPageNumber(2);
?><ul><?php
// Render each the title of each post for the current page in a list-item
foreach ($paginator as $item) {
echo '<li>' . $item->title . '</li>';
}
?></ul>
Como puede ver, este ejemplo no es muy diferente del anterior.
La única diferencia es que se pasa un objeto Zend_Db_Select al
método factory() de Paginator, en lugar de un array.
Para más detalles sobre cómo el adaptador de base de datos se asegura de que su consulta
se ejecute de manera eficiente, consulte el capítulo de Zend_Paginator en el
manual de referencia sobre los adaptadores DbSelect y DbTableSelect.