Paginação no CakePHP

paginacao-cake-php-topo

Tenho(Thiago Belém) 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

  1. CakePHP instalado e configurado (duh)
  2. Um model com alguns dados cadastrados no banco de dados (duh²)
  3. Boa vontade
  4. 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.

Fonte: Thiago Belém

Postagens Relacionadas