
Aprimorando o exemplo do CRUD utilizando o Zend Framework, iremos colocar uma paginação utilizando Zend_Paginator naquele exemplo, quem fez esta paginação foi meu amigo e colega @carlo_brayer.
Iremos alterar nosso indexAction(), para o código abaixo, onde iremos configurar as opções da nossa paginação como a quantidade de registros por página e número de páginas exibidas.
public function indexAction()
{
// Página que a paginação irá iniciar
$pagina = intval($this->_getParam('pagina', 1));
$albums = new Application_Model_DbTable_Albums();
$dados = $albums->fetchAll();
$paginator = Zend_Paginator::factory($dados);
// Seta a quantidade de registros por página
$paginator->setItemCountPerPage(5);
// numero de paginas que serão exibidas
$paginator->setPageRange(7);
// Seta a página atual
$paginator->setCurrentPageNumber($pagina);
// Passa o paginator para a view
$this->view->albums = $paginator;
}
Criaremos o layout da nossa paginação, onde teremos os links para primeira página, página anterior, número das páginas, próxima página e última página. Esse arquivo será colocado dentro da pasta “views/scripts/”. Você pode fazer esse layout conforme sua necessitade, o bom é que podemos reaproveitá-lo nas outras paginações que poderão ser feitas.
</pre>
<div class="pagination">
<!-- Link para a primeira página -->
<?php if (isset($this->previous)): ?>
<a title="Primeira Página" href="<?php echo $this->url(array('pagina' => $this->first)); ?>">« Primeira</a>|
<?php else: ?>
<a class="current" title="Primeira Página" href="<?php echo $this->url(array('pagina' => $this->first)); ?>">« Primeira</a>|
<?php endif; ?>
<!-- Link para a página anterior -->
<?php if (isset($this->previous)): ?>
<a title="Página Anterior" href="<?php echo $this->url(array('pagina' => $this->previous)); ?>">« Anterior</a>|
<?php else: ?>
<a class="current" title="Página Anterior" href="<?php echo $this->url(array('pagina' => $this->previous)); ?>">« Anterior</a>|
<?php endif; ?>
<!-- Links numerados -->
<?php foreach ($this->pagesInRange as $page): ?>
<?php if ($page != $this->current): ?>
<a title="<?php echo $page; ?>" href="<?php echo $this->url(array('pagina' => $page)); ?>"><?php echo $page; ?></a>|
<?php else: ?>
<a class="current" title="<?php echo $page; ?>" href="<?php echo $this->url(array('pagina' => $page)); ?>"><?php echo $page; ?></a>|
<?php endif; ?>
<?php endforeach; ?>
<!-- Link para a próxima página -->
<?php if (isset($this->next)): ?>
<a title="Próxima Página" href="<?php echo $this->url(array('pagina' => $this->next)); ?>">Próxima »</a>|
<?php else: ?>
<a class="current" title="Próxima Página" href="<?php echo $this->url(array('pagina' => $this->next)); ?>">Próxima »</a>|
<?php endif; ?>
<!-- última página -->
<?php if (isset($this->next)): ?>
<a title="Última Página" href="<?php echo $this->url(array('pagina' => $this->last)); ?>">Última »</a>
<?php else: ?>
<a class="current" title="Última Página" href="<?php echo $this->url(array('pagina' => $this->last)); ?>">Última »</a>
<?php endif; ?>
</div>
Agora em nossa tela da view iremos chamar esta paginação, colocando este código onde você desejar mostrá-la.
... <?php echo $this->paginationControl($this->albums, 'Sliding', 'pagination.phtml'); ?>
Feito isso, estaremos com nossa Zend_Paginator funcionando.







Olá BCSouza,
Gostei muito do seu post, mas estou como dificuldades de implementá-lo; pois estou usando layout e modules.
Quando eu chamo alguma action que precisa da paginação e mesma é exibida na primeira página ok, mas ao clicar nas demais… (todas as outras) como a url é imcrementada, não fica mais com o layout padrão pre-definido.
Tens alguma idéia para me ajudar.
Outra coisa, terei que ter uma paginação para cada module ou posso colocá-la em layouts/scripts e assim ficará para todos os modules?
Aguardo seu comentário.
Abração.