Url-rewriting probleme avec script de pagination

Eléphant du PHP | 130 Messages

19 mars 2008, 08:30

Bonjour,

J'ai mis en place l'url-rewriting, avec l'aide de Ryle, merci encore à lui. Cela fonctionne bien.

Mais je ne parviens pas à le faire fonctionner avec mon script de pagination, qui renvoit une
variable dynamique pour chaque nouvelle page.

Le script est un script que j'avais trouvé sur le net et que j'ai quelque peu modifié.
Je vous copie les parties qui nous intéressent, car il est très long,
et ça ne sert à rien de l'afficher en entier. Donc en gros, je ne vois pas du tout
comment faire pour intégrer dans ce script les urls modifiées pour htaccess.

$cible, contient le chemin qui est "../rubriques/mapage.php?start=", mais si on y touche le script ne marche plus. La variable start renvoi le numéro de réponses
qui va indiquer sur quelle page on se trouve. Si on la retire plus rien ne fonctionne bien sur.
Donc, comment faire pour modifier $cible en "../rubriques/mapage-start.html"
et que le script continue de marche ? Cela me semble tres compliquer.

Faut-il que je cherche un autre script de pagination qui prend en compte l'url rewriting ?
$parpage=10;
function navigation($total,$parpage,$start){
$nbliens=10;
if($_SERVER['QUERY_STRING']==""){
$query=$_SERVER['PHP_SELF'].'?start=';
}
else{
$tableau=explode("start=",$_SERVER['QUERY_STRING']);
$elements=count($tableau);
if($elements==1){
$query=$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&start=';
}
else{
if($tableau[0]==""){
$query=$_SERVER['PHP_SELF'].'?start=';
}
else{
$query=$_SERVER['PHP_SELF'].'?'.$tableau[0].'&start=';
}}}

if($start+$parpage<$total){
$cible=$query.($start+$parpage);
$lien='&nbsp;&nbsp;<a href="'.$cible.'">&nbsp;&nbsp;&nbsp;<img src="../images/suivante.gif" alt="page suivante" /></a>&nbsp;';
}}}
else{
$lien='';
}}

Code : Tout sélectionner

RewriteEngine on RewriteRule ^rubriques/([a-z]+)-start\.html$ rubriques/mapage.php?start=$1 [L]
Voilà ce qu'il faudrait que j'obtienne dans mon htaccess. Merci pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 mars 2008, 11:56

Plusieurs petites choses... la première est que je ne suis pas sur que ta règle corresponde vraiment à ce que tu attends... tu captures une chaine composée de lettre en minuscule ([a-z]+) et tu la passe en valeur de ton paramètre start ? Je me serais plutôt attendu à un nombre...

Ensuite, il y a peu de chance que tu trouves un script de pagination qui collera exactement au masque de tes adresses et il te faudra de toute façon l'adapter, alors autant modifier celui-là :)

Ce script te génère une url avec le nom de la page, suivit éventuellement des paramètres spécifiés pour l'ouvrir et complète la liste des paramètre avec un "start=" dont la valeur est calculée ensuite.

Le principe reste le même, sauf qu'il va falloir donner un format différent à ton url pour que les paramètre soient inclus dans le nom du fichier et non à la suite. Au lieu de "nomDeLaPage.php?[param1=xxx[&param2=yyyy ...]]&start=valeur" tu vas devoir construire l'adresse "rubriques/mapage[-xxx[-yyy ...]]-valeur.html" et ensuite dire à apache de récupérer les paramètres pour les repasser correctement.

La première question a te poser est : as-tu d'autres paramètres que le start ? car si c'est le cas il va falloir faire attention à l'ordre dans lequel ils sont passés. Si tu n'as que le start, bah tu peux complètement zapper ta fonction de pagination, et remplacer la variable $cible pour le lien suivant par "rubriques/mapage-".($start+$parpage).".html".

Il suffit alors que dans ta conf d'apache, tu demande de réécrire les url de la forme "rubriques/mapage-([0-9]+)\.html" en "rubriques/mapage.php?start=$1" :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 130 Messages

19 mars 2008, 13:56

C'est bon j'ai réécris en partie le script, du coup je l'ai meme
allégé. :)

Tout marche au poil.
Il me reste juste un problème dans le htaccess.

Code : Tout sélectionner

^rubriques/([a-z]+)-([0-9]+)\.html$ rubriques/mapage.php?start=$2
Il s'agit du nom de la page. Est-il possible d'éviter d'avoir à écrire 100 lignes
pour 100 pages différentes ?

Code : Tout sélectionner

^rubriques/([a-z]+)-([0-9]+)\.html$ rubriques/mapage.php?start=$2 ^rubriques/([a-z]+)-([0-9]+)\.html$ rubriques/tapage.php?start=$2 ^rubriques/([a-z]+)-([0-9]+)\.html$ rubriques/sapage.php?start=$2
Dans la partie regex c'est facile il suffit de placer ([a-z]+),
ça marche quelque soit le nom du fichier, mais dans la seconde partie la vraie url

rubriques/mapage.php?start=$2
y a t'il une solution , pour éviter de taper mapage, tapage, sapage, etc ?
Pour cette regle tous les fichiers sont dans le même répertoire, et il ny aura
qu'une seule règle.

Je voudrais éviter de placer trop de regles.
Je suis bête il suffit de remplacer mapage par $1.
Tout est ok. Merci Ryle. :)