BCSouza

PHP, CodeIgniter, HTML, CSS, JQuery, JSON, SQL, etc.

Paginação utilizando o Zend Framework

Zend Framework
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.

[code language="php" title="IndexController.php"]
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;
}
[/code]

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.

[code language="php" title="pagination.phtml"]</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)); ?>">&laquo; Primeira</a>|
<?php else: ?>
<a class="current" title="Primeira Página" href="<?php echo $this->url(array('pagina' => $this->first)); ?>">&laquo; 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)); ?>">&laquo; Anterior</a>|
<?php else: ?>
<a class="current" title="Página Anterior" href="<?php echo $this->url(array('pagina' => $this->previous)); ?>">&laquo; 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 &raquo;</a>|
<?php else: ?>
<a class="current" title="Próxima Página" href="<?php echo $this->url(array('pagina' => $this->next)); ?>">Próxima &raquo;</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 &raquo;</a>
<?php else: ?>
<a class="current" title="Última Página" href="<?php echo $this->url(array('pagina' => $this->last)); ?>">Última &raquo;</a>
<?php endif; ?>
</div>
[/code]

Agora em nossa tela da view iremos chamar esta paginação, colocando este código onde você desejar mostrá-la.

[code language="php" title="index.phtml"]
...
<?php echo $this->paginationControl($this->albums, 'Sliding', 'pagination.phtml'); ?>
[/code]

Feito isso, estaremos com nossa Zend_Paginator funcionando.

One Response so far.

  1. Evaldo Lopes says:

    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.


Subscribe to email feed

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin
  • Youtube

Fazendo loop entre d

Para realizarmos o looping vamos determinar uma data inicial e ...

MySQL case insensiti

Ao realizar uma busca em campos do tipo BLOB poderá ...

Utilizando API do Tw

Desenvolvi este plugin para recuperar os tweets de um ou ...

Usando mais de um la

Depois de já se ter um layout definodo no Zend ...

Paginação utilizan

Aprimorando o exemplo do CRUD utilizando o Zend Framework, iremos ...

Twitter updates

No public Twitter messages.

Sponsors