Problème avec ma pagination

Par hossine, il y a 9 ans


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

yanis-git, il y a 9 ans

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, il y a 9 ans

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)