BCSouza

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

Paginação utilizando o Zend Framework

Compartilhar

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.

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)); ?>">&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>

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.

Compartilhar

Uma resposta até agora.

  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.


Inscreva seu email no feed

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

Publicidade

Tweets @brunocsouza

uhuuuu RT : Alegria, Feriadão!!! valeu

testee

Chega a ser vergonhoso os cara vender site em site de compra coletiva!

Passando pela av rio de janeiro, quase na praia. Ãããã?? Hauiayuai

Só cmg que o google docs não quer funcionar direito no firefox?