| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
ferkcap WRInaute impliqué

Inscrit le: 14 Jan 2006 Messages: 476
|
Posté le : Mar Fév 14, 2006 0:41 Sujet du message: Pagination et rewriting |
|
|
Bonsoir,
Sur un site, pour faire la pagination je me sers de cette fonction
| Citation: |
function barre_navigation ($nb_total,
$nb_affichage_par_page,
$debut,
$nb_liens_dans_la_barre) {
$barre = '';
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}
// on calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_dans_la_barre%2==0) {
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}
else {
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}
if ($cpt_deb1 <= 1) {
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_la_barre;
}
elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}
else {
$cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}
if ($nb_pages_total <= $nb_liens_dans_la_barre) {
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}
// si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if ($cpt_deb != 1) {
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'"><<</A> ';
}
else {
$lien='';
}
$barre .= $lien;
// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
if ($cpt == $page_active) {
if ($cpt == $nb_pages_total) {
$barre .= $cpt;
}
else {
$barre .= $cpt.' - ';
}
}
else {
if ($cpt == $cpt_fin) {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}
else {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A> - ";
}
}
}
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}
// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total) {
$cible = $query.$fin;
$lien = ' <A HREF="'.$cible.'">>></A>';
}
else {
$lien='';
}
$barre .= $lien;
return $barre;
}
|
ça fonctionne impécable, mais le gros problème est que sur la page ou est appelée la pagination, j'utilise le rewriting.
Le script crois donc fonctionner sur des urls du type
repertoire.php
repertoire.php?lettre=a&debut=20
Alors qu'il est sur des
repertoire-a.html
Comment puis je modifier cela ?
Merci bien |
|
| |
|
 |
magic corp. WRInaute impliqué

Inscrit le: 17 Juin 2004 Messages: 422 Localisation: Suisse
|
Posté le : Mar Fév 14, 2006 1:53 Sujet du message: Pagination et rewriting |
|
|
C'est cette partie qui pose problème
| Code: |
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
} |
Car tu crées une URL du type "repertoire.php?lettre=a&debut=20". SI tu veux une URL du type "repertoire-a.php" tu dois la créer toi même.
Le rewriting ne convertie que "repertoire-a.php" en "repertoire.php?lettre=a&debut=20" lors de l'appel de la page, il ne convertie pas les URL dans le code HTML.
- Magic - |
|
| |
|
 |
ferkcap WRInaute impliqué

Inscrit le: 14 Jan 2006 Messages: 476
|
Posté le : Mar Fév 14, 2006 2:01 Sujet du message: Pagination et rewriting |
|
|
en fait, je voudrais bien trouver une bidouille dans le script pour pouvoir avoir des url du type :
repertoire-a-20.html
repertoire-a-20.html
repertoire-b-20.html
repertoire-b-20.html |
|
| |
|
 |
| |
|
|
|
|
A lire dans l'actualité sur WRI :
En savoir plus : URL Rewriting.
Autres sujets de discussion :
|
|