TigerZF
🌐Español

11.2. Ejemplos simples

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.