Blogdevphp

Codeigniter : gestion de la pagination

2014-01-04 codeigniter

Codeigniter 2, vous permet de ne pas avoir à réinventer la roue pour la pagination. Le framework, possède une classe, pour mettre en forme votre pagination. Du nombre d'objets à afficher par page jusqu'au style d'affichage de cette pagination. Au préalable, chargeons la librairie dans le fichier autoload.php dans le dossier application/config. Nous devons la rajouter dans le tableau $autoload['librairies'] afin que la classe soit disponible sur toute l'application.

Mise en place

Faisons simple pour commencer, déclarons les éléments dans notre contrôleur.

<?php
  $config['base_url'] = 'http://www.exemple.com/page/';
  $config['total_rows'] = 90;
  $config['per_page'] = 25;
  $config['num_links'] = '1';
  //Initialisation pagination
  $this->pagination->initialize($config);
?>

On renseigne l'url de base, qui dans le système de pagination, sera la même lors du passage aux pages suivantes.

Ensuite, le nombre total d'enregistrements de la table, le nombre d'objets à afficher par page. Enfin le nombre de liens à afficher, que vous souhaitez avant et après, le numéro de la page sélectionnée.

Dans notre vue, on va afficher la pagination de cette manière :

<?php
  echo $this->pagination->create_links();
?>

Dans le controleur, la déclaration de l'url de base peut-être faite d'une meilleure façon. Pour cela, dans le fichier config.php, se trouvant dans le dossier config, on va déclarer notre url pour toute l'application.

<?php
  $config['base_url']    = 'http://www.exemple.com/';
?>

Ce qui fait que la valeur de $config['base_url'], défini dans notre contrôleur, pour la pagination se présente comme cela, maintenant : 

<?php
  $config['base_url'] = base_url() . 'page/';
?>

De plus, il va falloir donner le nombre exact des objets présents, dans votre table.  Pour cela, on va utiliser l'Active Record de Codeigniter :

<?php
  $config['total_rows'] = $this->db->get('nom_table')->num_rows();
?>

Ici on récupère le nombre de lignes total d'une table. Si on regarde, de plus près l'url lors du passage à la page 2, on remarque quelque chose

<?php
  //page 1
  http://www.exemple.com/page/
  //page 2
  http://www.exemple.com/page/25
?>

Le fait d'avoir défini l'affichage d'objets à 25, à chaque changement de page, ce chiffre sera incrémenté de 25.

Aller plus loin

Vous préférez utiliser une pagination, disons plus classique, avec des numéros de pages qui s'incrémentent de un à un. On va ajouter, alors, dans notre contrôleur, un autre paramètre à la suite des autres :

<?php
  $config['use_page_numbers'] = TRUE;
?>

Il est possible également, de configurer les balises qui contiendront notre pagination, de cette manière :

<?php
  $config['full_tag_open'] = '<p>'; //balise ouvrante de la pagination
  $config['full_tag_close'] = '</p>'; //balise fermante de la pagination
?>

Si vous ne souhaitez pas utiliser, les numéros pour naviguer entre les pages mais la personnaliser à votre manière, c'est possible. Pour cela, débarassons-nous des numéros :

<?php
  $config['display_pages'] = FALSE;
?>

Après avoir empêcher l'affichage des numéros, il faut penser à les remplacer. Comme par exemple : 

<?php
  $config['next_link'] = 'Page suivante';
  $config['prev_link'] = 'Page précédente';
?>

Avec tous ces paramètres, il est bon de spécifier le segment de l'url concerné par la pagination. Sur Codeigniter 2, les éléments après l'url de base constituent des segments :

<?php
  $config['uri_segment'] = 2;
?>

En définitive, si on regroupe tout cela :

<?php
  $config['base_url'] = base_url() . 'page/';
  $config['total_rows'] = $this->db->get('nom_table')->num_rows();
  $config['use_page_numbers'] = TRUE;
  $config['display_pages'] = FALSE;
  $config['next_link'] = 'Page suivante';
  $config['prev_link'] = 'Page précédente';
  $config['uri_segment'] = 2;
  $this->pagination->initialize($config);
?>

Conclusion

Pour en savoir plus, sur cette librairie pagination, c'est ici.

comments powered by Disqus
Copyright © 2018 blogdevphp.fr - Tous droits réservés