Dev (Back & Front)ARTIGO

Paginação com CakePHP 1.2

Veja como fazer uma paginação de resultados com o CakePHP 1.2. Nesta paginação de resultados, você poderá definir o número de resultados por página, e quais campos deseja que tenham ordenação.

Este é o primeiro de três artigos, que falarão como fazer uma busca e paginar o resultado com o campo buscado, e como fazer uma busca de itens por letra inicial.

Espero que gostem!

Primeiro, vamos criar a base de dados:

 CREATE TABLE clientes (<br />  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,<br />  nome VARCHAR(120) NULL,<br />  sobrenome VARCHAR(120) NULL,<br />  email VARCHAR(150) NULL,<br />  site VARCHAR(150) NULL,<br />  PRIMARY KEY(id)<br />)<br />TYPE=InnoDB; 

Insira alguns registros nesta base de dados. Dê preferência para nomes diferentes, que comecem com letras diferentes, para que nosso exemplo funcione bem.

Vamos, agora, criar nosso controller:

clientes_controller.php<br /><?php<br />class ClientesController extends AppController<br />{<br />        var $name = 'Clientes';<br />        var $helpers = array('Html', 'Form');  // carregamos alguns helpers<br />        var $paginate = array('limit' => 15, 'page' => 1, 'order'=>array('nome'=>'asc'));<br />        // aqui definimos o limite de resultados por página, e a ordem da paginação<br /><br />        function index()<br />        {<br />                $this->Cliente->recursive = 0;<br />                $this->set('clientes', $this->paginate());<br />                // com este comando, geramos a paginação para página index<br />        }<br />}<br />?>

Agora, montaremos o arquivo responsável pelo VIEW, ou a visualização desta paginação. Vamos criar o arquivo index.ctp, e salvá-lo dentro da pasta /app/views/clientes

index.ctp<br /><br /><div class="clientes index"><br /><h2>Clientes</h2><br /><p><br /><?php<br />echo $paginator->counter(array(<br />'format'<br />=> __('Pagina %page% de %pages%, mostrando %current% registros de um<br />total de %count%, iniciando no registro %start%, terminando em %end%',<br />true)));<br />// aqui contamos quantas páginas e registros existem para esta paginação, e exibimos na tela<br />?><br /></p><br /><table cellpadding="0" cellspacing="0"><br /><tr><br />    <th><?php echo $paginator->sort('Cod','id');?></th><br />    <th><?php echo $paginator->sort('nome');?></th><br />    <th><?php echo $paginator->sort('sobrenome');?></th><br />    <th><?php echo $paginator->sort('email');?></th><br />    <th><?php echo $paginator->sort('site');?></th><br />    <th class="actions">Ações</th><br /></tr><br /><?php<br />$i = 0;<br />foreach ($clientes as $cliente):<br />    $class = null;<br />    if ($i++ % 2 == 0) {<br />        $class = ' class="altrow"';<br />    }<br />?><br />    <tr<?php echo $class;?>><br />        <td><br />            <?php echo $cliente['Cliente']['id']; ?><br />        </td><br />        <td><br />            <?php echo $cliente['Cliente']['nome']; ?><br />        </td><br />        <td><br />            <?php echo $cliente['Cliente']['sobrenome']; ?><br />        </td><br />        <td><br />            <?php echo $cliente['Cliente']['email']; ?><br />        </td><br />        <td><br />            <?php echo $cliente['Cliente']['site']; ?><br />        </td><br />        <td class="actions"><br />            <?php echo $html->link(__('Ver', true), array('action'=>'view', $cliente['Cliente']['id'])); ?><br />            <?php echo $html->link(__('Editar', true), array('action'=>'edit', $cliente['Cliente']['id'])); ?><br />           <br /><?php echo $html->link(__('Excluir', true),<br />array('action'=>'delete', $cliente['Cliente']['id']), null,<br />sprintf(__('Voce tem certeza que deseja excluir o registro # %s?',<br />true), $cliente['Cliente']['id'])); ?><br />        </td><br />    </tr><br /><?php endforeach; ?><br /></table><br /></div><br /><div class="paging"><br />    <?php echo $paginator->prev('<< '.__('anterior', true), array(), null, array('class'=>'disabled'));?><br /> |     <?php echo $paginator->numbers();?><br />    <?php echo $paginator->next(__('proxima', true).' >>', array(), null, array('class'=>'disabled'));?><br /></div><br /><div class="actions"><br />    <ul><br />        <li><?php echo $html->link(__('Novo Cliente', true), array('action'=>'add')); ?></li><br />    </ul><br /></div>

Pronto, galera!

Trabalha com desenvolvimento de sites e sistemas em PHP/MySQL há cerca de 8 anos. Atualmente, desenvolve seus projetos usando frameworks PHP, tais como CakePHP e Laravel, preferindo Laravel devido às suas atualizações e ao código fácil, consistente e leve. Além de meu blog (http://billjr.com.br), mantém um site (http://billtec.com.br) onde, além de oferecer serviços, testa suas experiências e descobertas com o Laravel. Nas horas vagas, como bom Nerd, assiste a filmes, séries e animes, e lê bons livros. Siga no Twitter @billjr.

Ver perfil