Bonjour

J'ai un problème avec ma pagination, elle est toujours fixée sur le numéros 1
je suis entrain de développer un site multilangue
je voudrais avoir une pagination comme ce lien
www.monsite.com/langue/slug-de-lacategorie?page=1

avec ce lien la pagination marche très bien category.php?cat_slug=services&page=2
moi je veux le transformer avec mon htaccess comme ce lien
www.monsite.com/langue/slug-de-lacategorie?page=1

j'aimerais bien que vous m'aidez à résoudre ce problème.
Merci d'avance

if(!isset($_GET['cat_slug'])){
    header("HTTP/1.1 301 Moved Permanently");
    header('location:'.WEBROOT.'404');
    die();
}

$slug = $db->quote($_GET['cat_slug']);

$nr_msg_page=1;

$entres= $db->query('SELECT count(*) AS nr_entre FROM works
LEFT JOIN categories ON categories.id=works.category_id
WHERE works.published=1 AND categories.slug='.$slug);
$totales = $entres->fetch();
$totaleDesMessages = $totales['nr_entre'];

//var_dump($totaleDesMessages); die();

$nombredepage = ceil($totaleDesMessages/$nr_msg_page);

if(isset($_GET['page']) && !empty($_GET['page']) && ctype_digit($_GET['page'])==1){
        if($_GET['page'] > $nombredepage){
            $page = $nombredepage;
        }else{
            $page = $_GET['page'];
        }

    }else{
        $page = 1;
    }

$premiermgsAafficher= ($page-1) * $nr_msg_page;

$select= $db->query('SELECT works.id,works.name,works.langue,works.slug as wk_slug,works.content,works.introduction,
works.category_id,works.published as wk_published, images.name as image_name,categories.id cat_id,categories.slug as cat_slug,
categories.name as cat_name,categories.langue as menu_lang

FROM works
LEFT JOIN images ON images.id=works.image_id 
LEFT JOIN categories ON categories.id=works.category_id
WHERE categories.published=1 AND categories.slug ='.$slug.'
ORDER by hits DESC
LIMIT '.$premiermgsAafficher.','.$nr_msg_page);
if($select->rowCount() ==0){
        header("HTTP/1.1 301 Moved Permanently");
        header('location:'.WEBROOT.'404');
        die();
}
$homes = $select->fetchAll();

2 réponses


Bonjour. Ton problème de réécriture d'url s'appel le routing. C'est l'étape où l'on parse (c'est à dire interprète une url) une route pour en déterminer la destination est les paramètres éventuels.

Ici tu dois utiliser les regex pour déterminer les paramètres d'une URL :

preg_match_all("#\/(fr|en)\/([\w-]+)\/?#i",$_SERVER["REQUEST_URI"],$match);
var_dump($match);
exit;

Explication :
1/ preg_match_all permet d'executer une expression régulière sur une chaine de caractère, elle prend 3 paramètres ici :

  • le pattern de la regex qui dit capture moi une chaine : /fr ou /en suivie de / suivie de n'importe quel caractère alphanumérique ou _ ou - répété a minimum 1fois.
  • le paramètre correspondant à l'url sans le nom de domaine.
  • un pointeur de variable qui contiendra le resultat de ta regex.

Tu devrais avoir un tableau à multi dimension contenant :

//la langue courante.
$match[1][0]
//le slug de categorie courant.
$match[2][0]

Attention ! Tout ceux-ci n'a pas été testé, il y a peut être des erreurs de synthaxes mais l'esprit est là.
Demande si tu as besoin de plus de détail sur tel ou tel point.

hossine
Auteur

Merci beaucoup pour votre réponse, je n'ai pa encore régler le problème mais je vais suivre cette trace .

array (size=3)
  0 => 
    array (size=1)
      0 => string '/fr/services' (length=12)
  1 => 
    array (size=1)
      0 => string 'fr' (length=2)
  2 => 
    array (size=1)
      0 => string 'services' (length=8)