PB URL REWRITING dans une fonction

Nouveau WRInaute
Bonjour à tous,

Je n'arrive pas à modifier une fonction php qui me sert à afficher une barre de liens << 1 2 3 4 5 >> pour afficher mes articles par page !

Pour que l'url rewrting marche, il faut que ma fonction génère des liens en html de la forme article_nomdelarticle-numeropage. Dans ma fonction les transmissions de variables par l'adresse sont utilisés avec ?page= !

Je n'ai pas assez de savoir pour modifier ma fonction de manière à ce qu'elle génère des liens en html ;)


Mon .htaccess :

Options +FollowSymlinks
RewriteEngine on
RewriteBase /cms/

#--------------------------------------------------
# Article avec nom et numéro de page
#--------------------------------------------------
RewriteRule ^article_([a-z]*)-([0-9]+).html$ article.php?nom=$1&page=$2 [L]

#--------------------------------------------------
# Article avec nom sans numéro de page
#--------------------------------------------------
RewriteRule ^article_([a-z]*).html$ article.php?nom=$1&page=0 [L]

Ma fonction :
<?php
// AFFICHE PAGE PAR PAGE LE RESULTAT D'UNE REQUETE
function barre_navigation ($nb_total, $nb_affichage_par_page, $page, $nb_liens_dans_la_barre)
{
$barre = '';

// Recherche de l'url courante
if ($_SERVER['QUERY_STRING'] == "")
{
$query = $_SERVER['PHP_SELF'].'?page=';
}

else
{
$tableau = explode ("page=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);

if ($nb_element == 1)
{
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page=';
}

else
{
if ($tableau[0] == "")
{
$query = $_SERVER['PHP_SELF'].'?page=';
}
else
{
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'page=';
}
}
}

// Calcul du numéro de la page active
$page_active = floor(($page/$nb_affichage_par_page)+1);

//Calcul du nombre de pages totales
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);

//$cpt_deb est le numéro de page qui s'affiche en premier et $cpt_fin est le numéro de page qui s'affiche en dernier
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 première page
if ($cpt_deb != 1)
{
$cible = $query.(0);
$lien = '<a href="' . $cible . '"><img src="images/debut.png" title="Première page" alt="Aller à la première page" /></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 .= "<span class=\"bar_list_pages_select\">" . $cpt . "</span>";
}

else
{
$barre .= "<span class=\"bar_list_pages_select\">" . $cpt . "</span>" . "&nbsp;";
}
}

else
{
if ($cpt == $cpt_fin)
{
$barre .= "<span class=\"bar_list_pages\"><A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A></span>";
}

else
{
$barre .= "<span class=\"bar_list_pages\"><A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A></span>&nbsp;";
}
}
}


$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}

// Affichage du lien vers la dernière page au cas où l'utilisateur ne se trouve pas sur la dernière 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 . '"><img src="images/fin.png" title="Dernière page" alt="Aller à la dernière page" /></a>';
}
else {
$lien='';
}
$barre .= $lien;



return $barre;
}
?>

Merci par avance,
Cordialement,
Arthur.
 
Nouveau WRInaute
Est-ce possible ??

Les modifications sont peu nombreuses à mon avis, elles sont plutôt où c'est en rouge :

<?php
// AFFICHE PAGE PAR PAGE LE RESULTAT D'UNE REQUETE
function barre_navigation ($nb_total, $nb_affichage_par_page, $page, $nb_liens_dans_la_barre)
{
$barre = '';

// Recherche de l'url courante
if ($_SERVER['QUERY_STRING'] == "")
{
$query = $_SERVER['PHP_SELF'].'?page=';
}

else
{
$tableau = explode ("page=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);

if ($nb_element == 1)
{
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page=';
}

else
{
if ($tableau[0] == "")
{
$query = $_SERVER['PHP_SELF'].'?page=';
}
else
{
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'page=';
}
}
}

// Calcul du numéro de la page active
$page_active = floor(($page/$nb_affichage_par_page)+1);

//Calcul du nombre de pages totales
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);

//$cpt_deb est le numéro de page qui s'affiche en premier et $cpt_fin est le numéro de page qui s'affiche en dernier
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 première page
if ($cpt_deb != 1)
{
$cible = $query.(0);
$lien = '<a href="' . $cible . '"><img src="images/debut.png" title="Première page" alt="Aller à la première page" /></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 .= "<span class=\"bar_list_pages_select\">" . $cpt . "</span>";
}

else
{
$barre .= "<span class=\"bar_list_pages_select\">" . $cpt . "</span>" . "&nbsp;";
}
}

else
{
if ($cpt == $cpt_fin)
{
$barre .= "<span class=\"bar_list_pages\"><A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A></span>";

}

else
{
$barre .= "<span class=\"bar_list_pages\"><A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A></span>&nbsp;";

}
}
}


$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}

// Affichage du lien vers la dernière page au cas où l'utilisateur ne se trouve pas sur la dernière 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 . '"><img src="images/fin.png" title="Dernière page" alt="Aller à la dernière page" /></a>';
}
else {
$lien='';
}
$barre .= $lien;



return $barre;
}
?>

J'espère que vous allez pouvoir me débloquer ... :roll:
 
WRInaute accro
Tu definis une variable "nom" dans ton regex qui n'existe pas dans le code que tu presente.
Elle vient d'ou cette variable ? et ce tableau => $tableau[0] ??
 
WRInaute accro
cyberzoide14 a dit:
tableau[0] représente nom=nomdelarticle

voilà j'espère t'avoir éclairé ..


oui et non... il vient d'ou ? ou l'initialise tu ? pourquoi il n'est pas passer en parametre dans la fonction ??

il faudrait pour ton rewrite qu'il ne contienne plus que le nom de l'article.

pour remplacer :

Code:
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'page=';
par
Code:
$query = 'article_'.$tableau[0].'-';
 
Nouveau WRInaute
il vient d'ici : $tableau = explode ("page=", $_SERVER['QUERY_STRING']);

oué pour ne garder que le nom de l'article faudrait cuter la partie nom= qui est toujours la même !!!

ce n'est pas forcément toujours le préfix article_, ça pourra être commentaire_ aussi donc faut choper le prefix dans l'adresse en fait grâce au variables HTTP !
 
WRInaute accro
cyberzoide14 a dit:
ce n'est pas forcément toujours le préfix article_, ça pourra être commentaire_ aussi donc faut choper le prefix dans l'adresse en fait grâce au variables HTTP !

waouu!!

je :arrow: []

1000 sry
 
Discussions similaires
Haut