Olá meus amigos tudo bem? Hoje é dia de eu falar sobre paginação no Zend Framework. Hoje vamos conhecer a classe Zend Paginator.
Talvez você esteja afirmando "Paginação no ZF é fácil"... e eu concordo mas eu preciso primeiro explicar como funciona a paginação no ZF usando DBTable para depois explicar a paginação utilizando o DOCTRINE ok? Uma coisa por vez amigo. Esse artigo será sem o DOCTRINE...
Mãos a "OBRA" jardineiros...
No controller vamos montar a consulta passando o select para o construtor do zend paginator veja;
ATENÇÃO! ESSE ARTIGO MOSTRA APENAS A PAGINAÇÃO, ESSA CONSULTA QUE EU FIZ DIRETAMENTE NO CONTROLLER EU NÃO RECOMENDO... O CERTO É EXISTIR UM MÉTODO NA MODEL QUE CONSULTE OK?
Veja que fizemos uma consulta na tabela noticia e o adapter do resultado jogamos dentro do Zend_Paginator na linha 11, definimos o número de registros por páginas, o número de páginas de forma númerica, a pagina atual que é o parametro vindo da URL (Caso seja nulo a pagina um é setada) e ai passamos para a view...
Legal, mas e aqueles controles da pagina? igual esse aqui:
São criados automaticamente? Como um passo de mágica? Claro que não horas, nós que vamos criar, e é bem simples viu? Crie um arquivo chamado paginador.phtml no diretório views/scripts ...
Ficaria assim o caminho dele application/views/scripts/paginador.phtml e ai insira esse layout dos controles da paginação;
PS: Joguei um CSS meu para dar uma cor ai, só para dar uma ideia ok? (PS2: ideia n tem mais acento depois da reforma ortográfica)
E agora vamos em nossa view e colocamos esses carinhas assim:
E pronto, dados PAGINADOS...
Claro que eu utilizei a paginação na minha view do meu jeito, normalmente eu envio um array de objetos para a view... mas já que fiz a consulta no controller então deixei do jeito mais simples ok?
E pronto.
Talvez você esteja afirmando "Paginação no ZF é fácil"... e eu concordo mas eu preciso primeiro explicar como funciona a paginação no ZF usando DBTable para depois explicar a paginação utilizando o DOCTRINE ok? Uma coisa por vez amigo. Esse artigo será sem o DOCTRINE...
Mãos a "OBRA" jardineiros...
No controller vamos montar a consulta passando o select para o construtor do zend paginator veja;
- <?php
- public function indexAction() {
- $noticia = new Application_Model_DbTable_Noticia();
- $select1 = $noticia->select();
- $select1->order('not_id desc');
- $dados = $noticia->fetchAll($select1);
- $pagina = intval($this->_getParam('pagina', 1));
- $paginator = Zend_Paginator::factory($dados);
- // Seta a quantidade de registros por página
- $paginator->setItemCountPerPage(2);
- // 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->resultado = $paginator;
- }
- ?>
ATENÇÃO! ESSE ARTIGO MOSTRA APENAS A PAGINAÇÃO, ESSA CONSULTA QUE EU FIZ DIRETAMENTE NO CONTROLLER EU NÃO RECOMENDO... O CERTO É EXISTIR UM MÉTODO NA MODEL QUE CONSULTE OK?
Legal, mas e aqueles controles da pagina? igual esse aqui:
São criados automaticamente? Como um passo de mágica? Claro que não horas, nós que vamos criar, e é bem simples viu? Crie um arquivo chamado paginador.phtml no diretório views/scripts ...
Ficaria assim o caminho dele application/views/scripts/paginador.phtml e ai insira esse layout dos controles da paginação;
PS: Joguei um CSS meu para dar uma cor ai, só para dar uma ideia ok? (PS2: ideia n tem mais acento depois da reforma ortográfica)
- <style>
- .pagination{
- background-color: #0E3460;
- }
- .pagination a{
- margin: 3px;
- border: 1px solid #0066cc;
- background-color: #004276;
- color:#FFF;
- }
- .pagination a:hover{
- background-color: #525757;
- }
- </style>
- <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>
E agora vamos em nossa view e colocamos esses carinhas assim:
- <table class="listagem-de-novidades">
- <tr>
- <th width="150"><b>Titulo</b></th>
- <th width="110"><b>Ação</b></th>
- <th width="35"><b>Destaque</b></th>
- </tr>
- <?php foreach ($this->resultado as $i => $r) { ?>
- <tr>
- <td height="40" width="143"><?php echo $r['not_titulo']; ?> </td>
- <td width="110">
- <div class="clear" style="height:5px;"></div>
<?php echo $r['not_id']; ?>Excluir
<a href="<?php echo $r['not_id']; ?>" class="botao-editar">Editar</a>
- </td>
- <td align="center" width="40">
- </td>
- </tr>
- <?php } ?>
- </table>
- <center>
- <?php echo $this->paginationControl($this->resultado,'Sliding','paginador.phtml');?>
- </center>
E pronto, dados PAGINADOS...
Claro que eu utilizei a paginação na minha view do meu jeito, normalmente eu envio um array de objetos para a view... mas já que fiz a consulta no controller então deixei do jeito mais simples ok?
E pronto.