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
Tweet
PHP CakePHP Pagination