IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Limiter la pagination


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Limiter la pagination
    Bonjour à tous, je viens vers vous car je rencontre un petit problème pour limiter la pagination automatique sur mon site web.

    Il s'agit d'une page affichant l'actualité du site, une requête va chercher les news dans la base de données, puis php les affiches, en les regroupant 5 par 5 et créé des pages automatiquement.

    Sauf qu'imaginons que j'ai 500 news, il va m'afficher 100 liens en bas de page...

    Je voulais donc savoir comment faire pour n'afficher par exemple que 10 pages (qui représente donc 50 news) et que le reste ne soit pas affiché.

    Avez vous une idée ?
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je suppose que tu affiches tes liens à l'aide d'une boucle qui va de 1 jusqu'au nombre de news / 5.
    Change alors simplement ta condition d'arrêt à 10.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Exacte j'utilise une petite boucle,
    mais je ne sais pas comment mettre en place ma condition.

    Voici ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for($i=1; $i<=$nbPage; $i++){
    	if($i == $cPage){
    		echo "<span class=\"pagination_on\">$i</span> ";
    	}
    	else{
    		echo "<span class=\"pagination\"><a href=\"index.php?p=$i\">$i</a></span> ";
    	}
    }
    Donc $i représente les différentes pages, cPage représente la page courante et nbPage représente le nombre total de page.

    Sauf que voilà, comment mettre une condition pour lui dire : après 10 pages, tu arrête de mettre les liens...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'es pas très concentré
    Pour aller jusqu'au 10 au lieu d'aller jusqu'à $nbPage, il suffit de remplacer $nbPage par 10.

    En fait c'est un peu plus subtil car le $nbPage peut être inférieur à 10.
    On peut faire comme ça du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $maxPage = min($nbPage, 10);
    for($i=1; $i<=$maxPage; $i++){
    Enfin comme je suppose que tu vas me demander 10 pages autour de la page courante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $minPage = max(1, $cPage - 5);
    $maxPage = min($nbPage, $minPage + 9);
    for($i= $minPage; $i<=$maxPage; $i++){
    alors evidemment quand on arrive au bout on n'a pas 10 pages en arrière mais bon ça va bien les conditions

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ah oui effectivement ^^
    Je voyais quelque chose de beaucoup plus compliqué...

    Et, j'ai une dernière petite question, admettons que je veuille toujours laisser visible la première et la dernière page.

    La aussi je ne vois pas quel condition mettre en place pour lui dire, si la page 1 est visible tu ne fais rien, sinon, tu affiche un truc du genre "1 ..."

    En tout cas, merci beaucoup pour le coup de main

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux ajouter la page 1 avant la boucle et commencer la boucle à 2.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ah oui très bien !
    Je test ça et je te tiens au courant

    Je fais de même avec la dernière page

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bon c'est pas mal du tout, par contre, j'essaye de faire apparaître les ... lorsque la "chaine numérique" est coupé, mais je crois que php ne comprends pas mon "if" cependant il ne m'affiche aucune erreur.

    Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    echo "<center>";
    if($i == 1 && 2 && 3 && 4 && 5){
    	echo "<span class=\"pagination\"><a href=\"index.php?p=1\">1</a></span> ";
    }
    else{
    	echo "<span class=\"pagination\"><a href=\"index.php?p=1\">1</a></span> ... ";
    }
    $minPage = max(2, $cPage - 3);
    $maxPage = min($nbPage - 1, $minPage + 6);
    for($i= $minPage; $i<=$maxPage; $i++){
    	if($i == $cPage){
    		echo "<span class=\"pagination_on\">$i</span> ";
    	}
    	else{
    		echo "<span class=\"pagination\"><a href=\"index.php?p=$i\">$i</a></span> ";
    	}
    }
    if($i == ($nbPage - 1) && ($nbPage - 2) && ($nbPage - 3) && ($nbPage - 4)){
    	echo "<span class=\"pagination\"><a href=\"index.php?p=$nbPage\">$nbPage</a></span>";
    }
    else{
    	echo " ... <span class=\"pagination\"><a href=\"index.php?p=$nbPage\">$nbPage</a></span>";
    }
    echo "</center>"
    (au passage, j'ai modifier les variables $minPage et $maxPage pour afficher 3 pages de chaque côté de la page actuelle.)

    As tu une idée à propos du if qui n'est pas pris en compte ?

    Ce if la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($i == 1 && 2 && 3 && 4 && 5){
    	echo "<span class=\"pagination\"><a href=\"index.php?p=1\">1</a></span> ";
    }
    else{
    	echo "<span class=\"pagination\"><a href=\"index.php?p=1\">1</a></span> ... ";
    }
    En gros, si $i (donc la page) est égale a 1, 2, 3, 4, ou 5, on affiche le numéro de page collé aux autres, sinon, on affiche le numéro de page 1 avec ... qui le sépare des auters liens.

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ca serait des "OU" pas des "ET" et il faut écrire l'expression entière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($i == 1 || $i == 2 || $i == 3 || $i == 4 || $i == 5){
    Mais plus simplement

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ah oui d'accord...
    Je suis vraiment mauvais alors ça se confirme...

    Merci, par contre ca ne fonctionne toujours pas.

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il te manque $i dans ton lien.
    Également tu n'as pas besoin de répéter la partie commune aux deux cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    echo '<span class="pagination"><a href="index.php?p="' . $i . '">' . $i '</a></span>';
    if($i > 5){
    	echo '....';
    }

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Oki, parfait j'ai réussis :p
    Enfin on a réussi

    Voici le code si jamais ca peut aider quelqu'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    $minPage = max(2, $cPage - 3);
    $maxPage = min($nbPage - 1, $minPage + 6);
    echo "<span class=\"pagination\"><a href=\"index.php?p=1\">1</a></span>  ";
    if($minPage > 2){
    	echo '... ';
    }
    else{}
    for($i= $minPage; $i<=$maxPage; $i++){
    	if($i == $cPage){
    		echo "<span class=\"pagination_on\">$i</span> ";
    	}
    	else{
    		echo "<span class=\"pagination\"><a href=\"index.php?p=$i\">$i</a></span> ";
    	}
    }
    if($minPage <= $nbPage - 8){
    	echo '... ';
    }
    else{
    	echo '';
    }
    echo "<span class=\"pagination\"><a href=\"index.php?p=$nbPage\">$nbPage</a></span>";
    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. (pagination) limit x,y en t-sql
    Par jesslegende dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/12/2011, 16h25
  2. [MySQL] Limité les numéros de page (pagination)
    Par dancom5 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/12/2011, 08h21
  3. Pagination avec un nombre de lignes limité
    Par Halex78 dans le forum Langage
    Réponses: 5
    Dernier message: 31/07/2008, 22h28
  4. [MySQL] Utilisation LIMIT pour une pagination
    Par tilou dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/05/2006, 08h29
  5. Réponses: 11
    Dernier message: 10/02/2006, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo