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!