Desenvolvimento - PHP

Criando uma paginação com CakePHP

Veja neste artigo como criar, em pouco tempo e de uma maneira bem simples, uma paginação de resultados usando o framework CakePHP.

por Thiago Belem



Opa opa! Estou de volta

Tenho recebido algumas dúvidas sobre como usar/fazer paginação no CakePHP, e resolvi ensinar pra vocês como eu resolvo esse problema…

Você vai que precisamos de exatamente duas linhas pra fazer uma consulta paginada no CakePHP, e mais duas linhas pra mostrar os links de “pŕoximo” e “anterior”.

Você vai precisar de:

  • CakePHP instalado e configurado (duh)
  • Um model com alguns dados cadastrados no banco de dados (duh²)
  • Boa vontade
  • 5 minutos (ou menos)

Começando pelo Controller

O trabalho da paginação começa no Controller… Defina os parâmetros de busca (find) normalmente, como você sempre fez:

class NoticiasController extends AppController {

	/**
	 * Lista as notícias utilizando paginação
	 */
	public function lista() {

		$options = array(
			'fields' => array('Noticia.titulo', 'Noticia.resumo'),
			'conditions' => array('Noticia.active' => true),

			'order' => array('Noticia.created' => 'DESC'),
			'limit' => 10
		);

	}

}

Definido os parâmetros de busca, podemos atribuí-los ao atributo paginate do Controller e rodar a consulta no model Noticia:

class NoticiasController extends AppController {

	/**
	 * Lista as notícias utilizando paginação
	 */
	public function lista() {

		$options = array(
			'fields' => array('Noticia.titulo', 'Noticia.resumo'),
			'conditions' => array('Noticia.active' => true),

			'order' => array('Noticia.created' => 'DESC'),
			'limit' => 10
		);

		$this->paginate = $options;

		// Roda a consulta, já trazendo os resultados paginados
		$noticias = $this->paginate('Noticia');

		// Envia os dados pra view
		$this->set('noticias', $noticias);
	}

}

E tá tudo pronto.. agora é só ir pra view mostrar essas notícias e colocar os links de paginação!

Paginação na View

Um exemplo básico (usando a tag article do HTML5) da listagem de notícias:

<article>
<?php foreach($noticias AS $data): ?>
	<h1><?php echo $data['Noticia']['titulo'] ?></h1>
	<p><?php echo $data['Noticia']['resumo'] ?></p>
<?php endforeach; ?>
</article>

E por ultimo, a listagem dos links de paginação:

echo $this->Paginator->prev('« Mais novas', null, null, array('class' => 'desabilitado'));
echo $this->Paginator->numbers();
echo $this->Paginator->next('Mais antigas »', null, null, array('class' => 'desabilitado'));

Na linha 1 e 3 nós mostramos os links para a próxima página e para a página anterior. Já na linha 2 nós mostramos aquela lista de números das páginas: 1, 2, 3, 4 cada uma com um link!

O PaginatorHelper tem muitas outras opções e customizações, não deixe de consultar a documentação .

Artigo originalmente publicado por Thiago Belem: Paginação no CakePHP

Thiago Belem

Thiago Belem - Tenho 23 anos e trabalho com Desenvolvimento WEB há mais de 10 anos. Atualmente moro no Rio de Janeiro e, além de trabalhar como Freelancer, sou Professor no Assando Sites, meu curso online de CakePHP.