La pagination avec Cakephp

Dans un site web, réaliser une pagination est quelque chose de laborieux même si dans le fond ce n'est pas si compliquer à faire mais ça demande beaucoup de travail. On a à chaque fois l'impression de réinventer la roue.

Heureusement CakePHP intègre un système de pagination en native. Il y a pas de plugin, ni extension à télécharger.

Il y a juste quelques manipulations à faire dans le contrôleur et la vue.

On va supposer qu'on veut afficher 10 "posts" par page.

Tout d' abord dans le contrôleur il faut indiquer à Cakephp d'utiliser le composant "paginator en déclarant le tableau composant comme ceci:

 

<?php public $components = array('Paginator');?>

Puis on configure la pagination avec "$this->Paginator->settings ".

Donc il y a rien de bien compliquer jusqu' a présent.

On met dans une variable le résultat de $this->Paginator->Paginate qu' on envoit pas la suite à la vue.

 Voici ci dessus l' exemple de mon contrôleur posts

<?php
App::uses('AppController', 'Controller');


class PostsController extends AppController {

public $components = array('Paginator'); //Obligatoire si on veut utiliser la pagination

	public function list_post()
	{
	        
		$this->Paginator->settings = array(
			'fields' => array('Post.id','Post.title'),
			'limit' => 10,//IMPORTANT car c' est le nombre de resulat par page.
			'order' => 'Post.id DESC',
			'paramType' => 'querystring' );
		$d['pages'] = $this->Paginator->Paginate('Post');//On met dans la variable le resulat de la requete
		$this->set($d);//On envoie le resulat a la vue
	}
?>

Puis dans la vue on utilise le helper paginator.

Voici ci dessous l' exemple de ma vue. 

<?php
echo '<div class="pagination">'; echo'<ul>';

echo $this->Paginator->first("Première page",array('rel'=>'prev','tag'=>'li'));
if($this->Paginator->hasPrev()){
echo $this->Paginator->prev("Précédent",array('tag'=>'li'));
}
echo $this->Paginator->numbers(array('first' => 2,'last' => 3,'modulus'=> '4','separator' => '','tag'=>'li'));
if($this->Paginator->hasNext()){
    echo $this->Paginator->next("Suivant",array('tag'=>'li'));
}
echo $this->Paginator->last("Dernière page",array('rel'=>'next','tag'=>'li'));

echo '</ul></div>';
?>

Pour plus d' information sur la pagination dans CakepHP je vous conseille de lire la doc à ce sujet.

http://book.cakephp.org/2.0/fr/core-libraries/components/pagination.html

http://book.cakephp.org/2.0/fr/core-libraries/helpers/paginator.html



PHP CakePHP Pagination

Commentaire (0)


Laissez un commentaire