Tengo poco incursionando en el Zend Framework y tuve la necesidad, como casi siempre, de paginar las consultas de la base de datos, investigando me di cuenta de que ZF ya cuenta con ésta característica y me puse manos a la obra.

Primero que nada el árbol de mi sistema lo tengo de la siguiente manera:

  • App
    • application
      • controllers
      • models
      • views
    • library
      • Zend
    • public
      • images
      • scripts
      • styles

Si eres nuevo como yo aquí está una excelente guia para iniciar Desarrolo de aplicaciones con Zend Framework o bien Multimedia: Tutorial Screencasts (éste último videos en inglés).

Primero cargamos las clases que necesitamos en el Bootstrap (archivo de arranque de configuración):

En mi caso hice una tabla llamada productos donde contiene una columna llamada «nombre_producto», para esto agregamos nuestra tabla productos en la carpeta models/Productos.php con lo siguiente:

<?php
class Producto extends Zend_Db_Table
{
 protected $_name = 'productos';
}
?>

Creamos nuestro controlador en application/controllers/indexController.php y quedaría de la siguiente manera:

<?php
class IndexController extends Zend_Controller_Action
{
 public function indexAction()
 {
 Zend_Loader::loadClass('Producto');
 $producto = new Producto();

 // obtenemos la página actual
 $page = $this->_getParam('page', 1);
 // número de registros a mostrar por página
 $registros_pagina = 20;
 // número máximo de páginas a mostrar en el paginador
 $rango_paginas = 10;

 $productos = $producto->fetchAll()->toArray();

 $paginador = Zend_Paginator::factory($productos);
 $paginador->setItemCountPerPage($registros_pagina)
     ->setCurrentPageNumber($page)
     ->setPageRange($rango_paginas);

 $this->view->productos = $paginador;
 }
}
?>

Creamos el archivo en el cual se mostrará nuestra información en application/views/index/index.phtml:

<?php
echo $this->paginationControl($this->productos,
 'Sliding',
 'index/pagination/pagination_control.phtml');
?>
<table>
<tr>
 <td>Nombre Producto</td>
</tr>
<?php foreach($this->productos as $producto): ?>
<tr>
 <td><?php echo $producto['nombre_producto']; ?></td>
</tr>
</table>
<?php endforeach; ?>

Por último añadimos el pagination control, yo lo coloqué en application/views/index/pagination/pagination_control.phtml, aquí puedes encontrar otros dos tipos o bien crear el tuyo propio:

<?php
if ($this->pageCount): ?>
<div class="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
  <a href="<?php echo $this->url(array('page'
   => $this->previous)); ?>">< Previous</a> | <?php else: ?>
  <span class="disabled">< Previous</span> |
<?php endif; ?>

<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
  <?php if ($page != $this->current): ?>
    <a href="<?php echo $this->url(array('page' 
      => $page)); ?>"><?php echo $page; ?></a> |
  <?php else: ?>
    <?php echo $page; ?> |
  <?php endif; ?>
<?php endforeach; ?>

<!-- Next page link -->
<?php if (isset($this->next)): ?>
  <a href="<?php echo $this->url(array('page'
  => $this->next)); ?>">Next ></a>
<?php else: ?>
  <span class="disabled">Next ></span>
<?php endif; ?>
</div>
<?php endif; ?>

Ésta entrada la hice basándome en la documentación oficial de Zend Framework, espero les sea de utilidad :-).

TolerantX

Compartir
Publicado por
TolerantX

Entradas recientes

Sublime Text

Después de manejar varios IDEs ó editores de texto para mi trabajo diario como: Dreamweaver…

12 años hace

¿Qué es ACTA?

Ahí les va para que vean de que se trata. [youtube L99sWP-jSyQ]

12 años hace

Obsolencia programada

Muy interesante video sobre la obsolencia programada. [youtube QosF0b0i2f0]

14 años hace

Multiples cuentas gmail en el mismo navegador

Bien como el título lo dice, para mi es una lata estar cambiandome de cuentas…

14 años hace

Google lanza plugin que soporta video y voz en Gmail sobre Linux

Google está lanzando el plugin que permite el uso de video y voz en el…

14 años hace

Una forma de decir hasta luego

Hoy se cierra una etapa de mi vida, un ciclo que en realidad no esperaba…

15 años hace