Paginação com Zend Framework


Mostrarei neste post como é simples fazer uma paginação usando o poderoso Zend Framework. O componente Zend_Paginator possibilita ao programador configurar uma série de opções afim de tornar a paginação mais intuitiva.

Atualmente o Zend_Paginator no permite paginar quatro tipos de model:

  • Array
  • DbSelect
  • DbTableSelect
  • Iterator

Para este exemplo farei a paginação usando o DbSelect, que acredito ser o mais utilizado por retornar registros do banco de dados.

A primeira coisa a ser feita é fazer a consulta ao banco de dados. Apenas selecionei todos os registros da tabela cliente:


//fazendo a consulta no banco de dados
$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->fetchAll("SELECT * FROM cliente");

Realizada a consulta, vamos criar a paginação:


//criando a paginaçao
Zend_Paginator::setDefaultScrollingStyle('Sliding');
Zend_View_Helper_PaginationControl::setDefaultViewPartial('partials/paginator.phtml');
$paginator = Zend_Paginator::factory($select);

//pagina atual. Se nao vier nenhuma pagina, mostra a primeira
$currentPage = $this->_getParam('page', 1);
$paginator
->setCurrentPageNumber($currentPage)
->setItemCountPerPage(5);

//manda para a viewer
$this->view->paginator = $paginator;

As chamadas estáticas servem para mostrar ao paginator qual o tipo de paginação e qual será a template padrão da paginação. No exemplo, a template padrão será o paginator.phtml, localizado em view/scripts/partials/paginator.phtml. Segue o código dela:


<?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; ?>

Dica: Se o seu sistema possui várias paginações, seria interessante se as chamadas dos métodos estáticos mostrados acima ficassem no bootstrap. Com isso, a configuração da paginação serviria para toda aplicação.

Para finalizar a paginação, falta somente o script que renderizará a listagem e mostrar a paginação:


<?php
if ( count($this->paginator) > 0) :
foreach ($this->paginator as $item) :
Zend_Debug::dump($item);
endforeach;
echo $this->paginator;
endif;
?>

Checa se a paginacao possui algum registro, faz o loop para exibir os registros e, por fim, renderiza a lista de páginas renderizadas pelo Zend_Paginator.

Simples assim. :)

Leitura recomendada: Zend_Paginator

Abraços.

, ,

  1. #1 by Bruna Milagres at May 20th, 2009

    Ei Tales!

    Bacana sua iniciativa em escrever um blog de programação! Como nao entendo muita coisa, fica difício de opinar..rsrs
    Some naumm!
    Abraços!
    Bruna Milagres
    http://www.brunamilagres.com.br

  2. #2 by Emerson Brôga at January 6th, 2010

    Gostei muito do tutorial …. parabéns…. tá bem explicadinho…. bom demais!

  3. #3 by rafael at January 21st, 2010

    Iradooo este post, está de parabéns velho!

(will not be published)
  1. No trackbacks yet.