Back-End

6 jul, 2009

Paginação com CakePHP 1.2

Publicidade

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 (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nome VARCHAR(120) NULL,
  sobrenome VARCHAR(120) NULL,
  email VARCHAR(150) NULL,
  site VARCHAR(150) NULL,
  PRIMARY KEY(id)
)
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
<?php
class ClientesController extends AppController
{
        var $name = 'Clientes';
        var $helpers = array('Html', 'Form');  // carregamos alguns helpers
        var $paginate = array('limit' => 15, 'page' => 1, 'order'=>array('nome'=>'asc'));
        // aqui definimos o limite de resultados por página, e a ordem da paginação

        function index()
        {
                $this->Cliente->recursive = 0;
                $this->set('clientes', $this->paginate());
                // com este comando, geramos a paginação para página index
        }
}
?>

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

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

Pronto, galera!