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 :-).