PEAR::Pager tuto : Créer des cool Url pour la pagination avec Pager et mod_rewrite
À 07:01 dans la rubrique PHP / PEAR
←
/ #832
/ rss
/ →
Ce texte est une des traductions d'une série d'articles de Lorenzo Alberton
(original)
La plupart des classes de pagination PHP peuvent fonctionner très bien avec des paramètres GET, correctement envoyés par les pages.
Cependant, rares sont celles qui vous laissent le contrôle sur les liens qu'elles créent.
Ceci peut être particulièrement ennuyant quand vous travaillez avec des cool URL (grâce à mod_rewrite ordonne ou fait à la main par votre contrôleur) et la classe de de pagination ne peut pas les respecter, en affichant les liens réels et laids.
Si le scénario ci-dessus n'est pas nouveau pour vous, alors vous devriez probablement tester PEAR::Pager.
C'est un paquet entièrement personnalisable qui devrait satisfaire tous vos besoins, y compris votre format préféré de lien.
Exemple : Comment dire au pager le format de vos liens
Supposons-vous ont un site de commerce électronique, avec un catalogue de produit que l'utilisateur peut passer en revue par catégorie.
Par exemple, pour énumérer tous les produits de la catégorie AAA, vous passez ce paramètre à votre page : http://monserveur.com/produits.php?cat=AAA.
Si le catalogue est assez grand, la dispersion des produits dans plusieurs pages serait une décision intéressante,
mais maintenant vous devez également passer le numéro de page à l'URL : http://monserveur.com/produits.php?cat=AAA&pageID=3.
Naturellement votre application intelligente peut produire des URL plus propres, comme ceci : /produits/AAA/3.html qui sont facilement décodés par le mod_rewrite.
Voyons l'exemple de règle .htaccess pour cette transformation d'URL :
[apache] RewriteEngine on RewriteBase / RewriteRule ^produits/(\w+)/(\d+)\.html$ /produits.php?cat=$1&pageID=$2 [L]
Normalement, la classe de pagination les paramètres de cat et de pageID et établirait les liens comme d'habitude, c.-à-d.
/produits.php?cat=AAA&pageID=1 /produits.php?cat=AAA&pageID=2 ... /produits.php?cat=AAA&pageID=6
mais vous pouvez apprendre à PEAR::Pager à produire les liens qui respectent votre convention :
[php]
<?php
require_once 'Pager/Pager.php';
//toujours valider paramètres GET
if (!empty($_GET['cat']) && $myApp->is_valid_cat($_GET['cat'])) {
$cat = $_GET['cat'];
} else {
$cat = 'AAA'; //default category
}
// Récupération des produits.
// S'il y a beaucoup de produits,
// vous pouvez envisager d'employer les fonctions de Pager_Wrapper
$produitList = $myApp->getProductsByCat($cat);
$pager_params = array(
'mode' => 'Sliding',
'append' => false, //ne pas ajouter les paramètres GET à l'URL
'path' => 'http://monserveur.com/produits/' . $cat,
'fileName' => '%d.html', //Pager remplace "%d" par le numéro de la page
'perPage' => 10, //afficher 10 articles par page
'itemData' => $produitList,
);
$pager = & Pager::factory($pager_params);
$data = $pager->getPageData();
//Afficher les produits de la page courante
echo 'Données de la page courante: ';
print_r($data);
//afficher les liens pour la navigation dans la catégorie courante
echo $pager->links;
?>
Comme vous pouvez voir, vous pouvez dire au pager le chemin et le nom de fichier qu'il devrait employer.
N'oubliez pas de placer l'option de append à FALSE, sinon le pager essayera d'apposer les vars GET à l'URL comme d'habitude.
Example #2: le numéro de la page est dans le chemin et non dans le nom du fichier?
Et si le numéro de la page dans votre url se trouve dans le path et non dans nom fichier?
Ca pourrait ressembler à un problème, puisque Pager recherche la chaîne « %d » dans le paramètre nom de fichier, et se plaint s'il ne peut pas y trouver cette chaîne.
Non, vous ne pouvez pas le mettre dans le paramètre path, mais puisque le pager combinera simplement les paramètres path et nom de fichier pour former l'URL, nous pouvons le duper et mettre une partie du path dans le nom de fichier lui-même.
Pour le moment, si nous avons une url comme
http://monserveur.com/produits/AAA/3/index.html,
où "3" est le numéro de la page,
cette règle de mod_rewrite et ce script php le feront fonctionner:
[apache] RewriteEngine on RewriteBase / RewriteRule ^produits/(\w+)/(\d+)/index\.html$ /produits.php?cat=$1&pageID=$2 [L]
[php]
<?php
require_once 'Pager/Pager.php';
// ...
$pager_params = array(
'mode' => 'Sliding',
'append' => false, //ne pas ajouter les paramètres GET à l'URL
'path' => 'http://monserveur.com/produits/' . $cat,
'fileName' => '%d/index.html', //Pager remplaces "%d" par le numéro de la page
'perPage' => 10, //afficher 10 articles par page
'itemData' => $produitList,
);
$pager = & Pager::factory($pager_params);
$data = $pager->getPageData();
//afficher les produits de la page courante
echo 'Données de la page courante: ';
print_r($data);
//afficher les liens pour la navigation dans la catégorie courante
echo $pager->links;
?>
Voilà c'est fait. J'espère que ce tuto était utile.








Commentaires
1. Le mardi 11 novembre 2008 à 12:02, par Jice
2. Le mardi 11 novembre 2008 à 12:34, par Moosh
Ajouter un commentaire