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.

à lire aussi