Page 1 sur 1

Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 16:09
par yoann38
Salut les jeunes.
Bon enfin j'arrive au bout de mon projet et je bute depuis ce matin depuis sur un truc tt bête je pense mais bon.

J'ai un système de pagination qui marche bien mais je suis par exemple sur la page :

http://127.0.0.1/digital/actu/rhone-alp ... noble.html

J'ai donc ma pagination qui me créer les lien comme ci dessous:
<div class="pagination col-md-12">
	<div class="row">
	<span class="active">1</span>&nbsp;
	<a href="ville-de-grenoble-page-2.html" class="page" data-page="2" data-du="" data-au="">2</a>
	<a href="ville-de-grenoble-page-3.html" class="page" data-page="3" data-du="" data-au="">3</a>
	<a href="ville-de-grenoble-page-2.html" class="page" data-page="2" data-du="" data-au="">
	<i class="fa fa-angle-right"></i></a> 
	</div>
</div>
Si on va sur la page 2 et qu'on revient ensuite sur la page 1 soit via les fleches soit en cliquant sur 1 on arrive sur la page :
http://127.0.0.1/digital/sortie/region- ... age-1.html au lieu de revenir sur la page par default qui est donc pour l'exemple:

http://127.0.0.1/digital/actu/rhone-alp ... noble.html
Comment résoudre ce problème svp ?
<?php
		//traitement pagination
		$nbre_annonces_par_page = 6;
		$nbre_pages_max_gauche_et_droite = 2;
		$last_page = ceil($nb / $nbre_annonces_par_page);
		if(isset($_GET['page']) && is_numeric($_GET['page'])){
		$page_num = $_GET['page'];
		} else {
		$page_num = 1;
		}
		if($page_num < 1){
		$page_num = 1;
		} else if($page_num > $last_page) {
		$page_num = $last_page;
		}
		$limit = 'LIMIT '.($page_num - 1) * $nbre_annonces_par_page. ',' . $nbre_annonces_par_page;
		
		$pagination = '';
		if($last_page != 1){
		if($page_num > 1){
		$previous = $page_num - 1;
		$pagination .= '<a href="'.$valeur_paginate.'-page-'.$previous.'.html" class="page" data-page="'.$previous.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-left"></i></a> &nbsp; &nbsp;';
		for($i = $page_num - $nbre_pages_max_gauche_et_droite; $i < $page_num; $i++){
		if($i > 0){
		$pagination .= '<a href="'.$valeur_paginate.'-page-'.$i.'.html" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> &nbsp;';
		}
		}
		}
		$pagination .= '<span class="active">'.$page_num.'</span>&nbsp;';
		for($i = $page_num+1; $i <= $last_page; $i++){
			
			
		$pagination .= '<a href="'.$valeur_paginate.'-page-'.$i.'.html" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> ';

		if($i >= $page_num + $nbre_pages_max_gauche_et_droite){
		break;
		}
		}
		if($page_num != $last_page){
		$next = $page_num + 1;
		$pagination .= '<a href="'.$valeur_paginate.'-page-'.$next.'.html" class="page" data-page="'.$next.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-right"></i></a> ';
		}
		}
		

		$sql .= " ORDER BY loisirs.id_loisirs DESC LIMIT ".intval(($page-1)*$parPage).", ".$parPage;;
// ....
Merci à vous

Re: Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 16:43
par Saian
Salut yoann38, déjà je pense que tu y gagnerais largement à mieux aérer et indenter ton code. Il serait ainsi beaucoup plus facile à lire et tu identifierais probablement mieux les portions de code concernées.

A priori pour traiter ton problème tu dois te concentrer sur chaque ligne qui produit un lien de pagination et sur la ligne qui produit le lien précédent.
Il te suffit ensuite d'ajouter un test pour savoir s'il est nécessaire ou pas d'ajouter le -page-n en fonction de la valeur de n. Tu peux pour ça utiliser par exemple un opérateur ternaire.

Si je me suis pas loosé :
$pagination .= '<a href="'.$valeur_paginate.($previous > 1 ? '-page-'.$previous : null).'.html" class="page" data-page="'.$previous.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-left"></i></a> &nbsp; &nbsp;';

$pagination .= '<a href="'.$valeur_paginate.($i > 1 ? '-page-'.$i : null).'.html" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> &nbsp;';

Re: Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 16:46
par Spols
EDIT : J'ai écrit mon post en même temps que Saian, je pense vraiment qu'une fonction sera une meilleure option que l'opérateur ternaire.

Tu as 2 possibilités,

soit tu crée une exception à la génération des liens que si page-1 => tu ne le met pas
soit tu crée une redirection automatique de toute tes page-1 => page principale

je serai plus pour l'option 1 mais elle demande plus de code.
Je partirai aussi pour une fonction de création de la page
$pagination .= '<a href="'.$valeur_paginate.'-page-'.$previous.'.html"...
devient
$pagination .= '<a href="'.create_url($valeur_paginate,$previous).'.html"...
avec
function create_url ($valeur,$page) {
if ($page == 1) return $valeur;
else return $valeur.'-page-'.$page;
}

Re: Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 16:52
par Saian
Moué ça se discute Spols. C'est très bien de faire des fonctions mais on va pas commencer à faire des fonctions pour tous les tests, sinon on a pas fini. ;)

EDIT : d'ailleurs je ferais bien un ternaire dans ta fonction ^^
function create_url($valeur, $page) {
  return $page == 1 ? $valeur : $valeur.'-page-'.$page;
}
Et quitte à faire une fonction, autant y mettre la génération de l'url complète... (avec le .html quoi) :D
function create_url($valeur, $page) {
  return ($page == 1 ? $valeur : $valeur.'-page-'.$page).'.html';
}
Et pourquoi pas une fonction qui génère le lien complet même ^^
Allez c'est bon je m'arrête :P

EDIT 2 : je taquine bien sur, ton intervention est tout aussi pertinente que la mienne et en l’occurrence la création d'une fonction est tout à fait justifiée dans le sens où elle sera bien utilisée plusieurs fois (évitant une redondance de code) et allégera le code principal ce qui le rendra plus lisible et la lisibilité du code est je pense un point très important. :)

Re: Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 17:30
par yoann38
Salut à vous.
Merci pour le coup de pouce et de votre rapidité.

Le bouton " < " qui permet de revenir en arrière de la page 2 à la page 1 me bascule bien du coup maintenant sur la page par default et on a plus le page-1.html ( oui car sinon pour le seo pas bon page-1.html est pareil que la page par default... )

Le seul hic maintenant c'est que j'ai toujours le soucis si on clique sur le bouton 1 de la pagination la on a toujours ...-page-1.html

Merci à vous ;)

Le code actuel:
<?php
		//traitement pagination
		$nbre_annonces_par_page = 6;
		$nbre_pages_max_gauche_et_droite = 2;
		$last_page = ceil($nb / $nbre_annonces_par_page);
		if(isset($_GET['page']) && is_numeric($_GET['page'])){
		$page_num = $_GET['page'];
		} else {
		$page_num = 1;
		}
		if($page_num < 1){
		$page_num = 1;
		} else if($page_num > $last_page) {
		$page_num = $last_page;
		}
		$limit = 'LIMIT '.($page_num - 1) * $nbre_annonces_par_page. ',' . $nbre_annonces_par_page;
		
		$pagination = '';
		if($last_page != 1){
		if($page_num > 1){
	
		$previous = $page_num - 1;

		$pagination .= '<a href="'.$valeur_paginate.($previous > 1 ? '-page-'.$previous : null).'.html" class="page" data-page="'.$previous.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-left"></i></a> &nbsp; &nbsp;';

		$pagination .= '<a href="'.$valeur_paginate.($i > 1 ? '-page-'.$i : null).'.html" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> &nbsp;';
		
		for($i = $page_num - $nbre_pages_max_gauche_et_droite; $i < $page_num; $i++){
		if($i > 0){

               // le bouton on ca génére page 1
		$pagination .= '<a href="'.$valeur_paginate.'-page-'.$i.'.html" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> &nbsp;';
		}
		}
		}
		$pagination .= '<span class="active">'.$page_num.'</span>&nbsp;';
		for($i = $page_num+1; $i <= $last_page; $i++){
			
			
		$pagination .= '<a href="'.$valeur_paginate.'-page-'.$i.'.html" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> ';

		
		
		
		if($i >= $page_num + $nbre_pages_max_gauche_et_droite){
		break;
		}
		}
		if($page_num != $last_page){
		$next = $page_num + 1;
		$pagination .= '<a href="'.$valeur_paginate.'-page-'.$next.'.html" class="page" data-page="'.$next.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-right"></i></a> ';
		}
		}

Re: Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 17:36
par Saian
Re yoann38, tu dois avoir une des lignes générant un lien où tu n'as pas ajouté le test (ou la fonction).

Re: Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 17:39
par yoann38
C'est vraiment rapide :wink:

J'ai rajouté dans mon dernier post l'endroit ou le code permet de créer le bouton page 1.
Je vais regardé ça en meme temps ...

Re: Pagination si page 1 mettre page par default

Posté : 18 mai 2016, 17:42
par yoann38
Bon effectivement j'avais oublié la ptite ligne qui vas bien.

Je vous laisseré en mp le site une fois finis :)

Merci à vous