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 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 by Emerson Brôga at January 6th, 2010
Gostei muito do tutorial …. parabéns…. tá bem explicadinho…. bom demais!
#3 by rafael at January 21st, 2010
Iradooo este post, está de parabéns velho!