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 :

Comment affichage page/page sous cette forme : 1-2-3- - - - - - -15-16-17 ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut Comment affichage page/page sous cette forme : 1-2-3- - - - - - -15-16-17 ?
    Bonjour j'ai fait un affichage page par page, mais si le nombre de page s'affiche en continue, ce que je souhiaterai c'est qu'à partir de tel nombre de pages l'affichage des liens ce fassent de cette maniére :

    1-2-3 ....... 12-13-14 et non 1-2-3-4-5-6-7-8-9-10-11-12-13-14.

    Voici le code de ma fonction :

    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
    26
    27
    28
    29
    30
    31
    function affichePages($nb,$page,$total) {   
     
    //Passage de mes variables 
    $type = $_GET['type']; 
    $xord = $_GET['xord']; 
    $p = $_GET['p']; 
     
    //Si $p==0 on lui assigne la valeur 1 
    if ($p=="") {$p="1";}
     
    $nbpages=ceil($total/$nb); $numeroPages = 1; 
    $compteurPages = 1; 
    $limite = 0; 
     
    echo '<table border = "0" ><tr>'."\n"; 
     
    while($numeroPages <= $nbpages) 
    {  
    if($p == $numeroPages)  
     
    {  echo "<td class='faq'><strong> [".$p."]</strong></td>"."\n"; } 
     
     else  {  echo '<td class="faq"><a href = "'.$page.'?p='.$numeroPages.'&limite='.$limite.'&type='.$type.'&xord='.$xord.'">'.$numeroPages.'</a></td>'."\n"; }  
     
     $limite = $limite + $nb; 
     $numeroPages = $numeroPages + 1; 
     $compteurPages = $compteurPages + 1; 
     if($compteurPages == 10) {  $compteurPages = 1; echo '<br>'."\n"; }  }  
     
     echo '</tr></table>'."\n"; 
     }
    Merci à tous pour votre aide

    Aurore

  2. #2
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    J'avoue ne pas trop comprendre ton code actuel.

    Mais sinon tu ne peux pas tout simplement compter le nombre de pages et faire un if où tu n'affiche que si le n° de page est > au n° de page actuel - 2 ET < au n° de page actuel + 2 OU > au nombre de page total - 3.

    De sorte que tu auras les deux pages précédentes, les deux suivantes et les 3 dernieres.

  3. #3
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    Salut,

    oui voilà c'est ce que je veux faire mais ce que je cherche c'est comment obtenir ce résultat.

    Aurore

  4. #4
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Et si je veux accéder à la page 7, je fais comment ? Question subsidiaire : une fois que je suis sur la page 7, quels sont les numéros affichés ?

    Quoi qu'il en soit, il suffit de rajouter un test avant ton opération d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
     
     else {
        if($numeroPages > $limitInferieure && $numeroPages > $limitSuperieure){
            // Si le numero de page est compris entre les deux limites, on affiche un point
            echo '<td class="faq"> . </td>';
        } else {
            // Sinon, on affiche le numero et le lien
            echo '<td class="faq"><a href = "'.$page.'?p='.$numeroPages.'&limite='.$limite.'&type='.$type.'&xord='.$xord.'">'.$numeroPages.'</a></td>'."\n";
        }
    }
    ...

  5. #5
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Bah je peux te donner des idées mais je n'ai pas vraiment le temps de te faire le code. Surtout que j'ai du mal à comprendre à quoi correspondent les variables que ta fonction prend en entrée et le code en lui même.

    A la limite commente le déjà ça aidera.

    EDIT : Et ben pour aller à la page 7 il faut avancer un max petit à petit jusqu'à y être (ce genre de sommaire est trés commun sur le net).

  6. #6
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Momodedf
    EDIT : Et ben pour aller à la page 7 il faut avancer un max petit à petit jusqu'à y être (ce genre de sommaire est trés commun sur le net).
    Ce que je connais sur le web, c'est justement l'inverse en règle générale Par exemple, si tu es à la page 6, te ne vois que celles qui sont adjacentes :

    << < . . . 5 - 6 - 7 . . . > >>

    à l'exception des premières pages et des dernières ou la navigation ressemble à ça :

    << < 1 - 2 - 3 . . . > >>

    << < . . . 21 - 22- 23 > >>

    C'est pour ça que je comprends pas bien le but de ce code.

  7. #7
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    Voici le code commenté :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    function affichePages($nb,$page,$total) {   
     
    //Passage de mes variables 
    $type = $_GET['type']; //variable qui définit le type de l'acte
    $xord = $_GET['xord']; //variable qui définit l'ordre d'affichage
    $p = $_GET['p']; //variable qui nous donne le n° de la page en cours
     
    //Si $p==0 on lui assigne la valeur 1 
    if ($p=="") {$p="1";}
     
    $nbpages=ceil($total/$nb); //Calcul du nombre de pages par rapport à la requête SQL
    $numeroPages = 1; //Valeur initial du numéro de la page
    $compteurPages = 1; 
    $limite = 0; //Limite pour la requête SQL initial
     
    echo '<table border = "0" ><tr>'."\n"; 
     
    while($numeroPages <= $nbpages) 
    {  
     
    if($p == $numeroPages)  
     
    {  echo "<td class='faq'><strong> [".$p."]</strong></td>"."\n"; } //affichage de la page courante sans le lien
     
     else  {  echo '<td class="faq"><a href = "'.$page.'?p='.$numeroPages.'&limite='.$limite.'&type='.$type.'&xord='.$xord.'">'.$numeroPages.'</a></td>'."\n"; } //Lien pour les autres pages 
     
     $limite = $limite + $nb; //Calcul de la limite pour la requête
     $numeroPages = $numeroPages + 1; 
     $compteurPages = $compteurPages + 1; 
     if($compteurPages == 10) {  $compteurPages = 1; echo '<br>'."\n"; }  }  
     
     echo '</tr></table>'."\n"; 
     }
    Cold Hand => j'ai rajouté ton test mais en fait cela m'affiche ça :

    1-2-3 .............

    en attribuant à mes variables $limitInferieure et $limitSuperieure la valeur 3

    Merci

    Aurore

  8. #8
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Si tu mets la même valeur pour ta limite inférieure et ta limite supérieure, c'est normal que ça marche pas terrible... Par exemple, si tu veux afficher :

    1 - 2 - 3 . . . . . 10 - 11 - 12

    Il faut utiliser 3 comme limite inférieure et 10 comme supérieur. Tous les chiffres entre 3 et 10 ne seront donc pas affichés.

  9. #9
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    autant pour moi, mais même en faisant :

    $limitInferieure = 3;
    $limitSuperieure = 10;

    l'affichage est celui là :

    1-2-3-4-5-6-7-8-9-10 ..............

    Aurore

  10. #10
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    coquille dans mon code... Il faut bien evdemment lire

    $numeroPages < $limitSuperieure

  11. #11
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    j'ai fait la correction et cela marche. Par contre maintenant si je clique sur la page 3, il faudrait que le reste se décale. Je m'explique :

    avec ton code voici l'affichage

    1-2-3.......10-11-12 3 étant la page séléctionnez.

    Ce qu'il faudrait c'est que cela se transforme en 3-4-5.....10-11-12

    Je ne sait pas si je m'explique assez bien désolé

    Merci beaucoup de ton aide

    Aurore

  12. #12
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    D'où mes deux premières questions :

    Et si je veux accéder à la page 7, je fais comment ? Question subsidiaire : une fois que je suis sur la page 7, quels sont les numéros affichés ?

    Selon moi, ton modèle n'est pas pensé suffisament à fond... Reprends une feuille de papier, essaie de traiter tous les cas (comment naviguer facilement, quels sont les comportements les plus courants, etc) et une fois que tu as tout ça bien en tête, là, tu peux te lancer dans le code. Parce que, pour reprendre ton dernier mail, si j'en crois ton "3-4-5.....10-11-12", une fois que je suis sur la page 3, je peux plus revenir sur la 1 et la 2...

  13. #13
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    tout à fait, tu as raison Cold Hand, je vais revoir tout cela au calme, il faudrait en effet position des liens suivants et précédents du style < pour une page << pour le retour tout au début.

    Je vais étudier cela comme tu dis en remettant tout à plat sur papier.

    Merci de ton aide précieuse.

    @+

    Aurore

    Une dernière question : ton système décrit plus haut

    << < . . . 5 - 6 - 7 . . . > >> me parait être le plus cohérent, je crois même que c'est ce que je voudrais sans le savoir

    Est-ce possible ? Quelle serait donc ma requête ?

    Merci

  14. #14
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Tout est possible Pour cette solution, l'idée est la suivante (je te donne des pistes et je te laisse modifier ton code) :

    - Ton premier lien (<<) est TOUJOURS un lien qui recharge la page 1
    - Ton dernier lien (>>) est TOUJOURS un lien qui recharge la page dernière page
    - Tu connais à tout moment ta page courante ($pageCourante)
    - Ton deuxième lien (<) est TOUJOURS un lien qui recharge $pageCourante - 1 (sauf quand $pageCourante = 1)
    - Ton avant-dernier lien (>) est TOUJOURS un lien qui recharge $pageCourante + 1 (sauf quand $pageCourante = la dernière page)
    - Tu peux définir arbitrairement que tu veux afficher N pages avant la courante et M pages après la courante (généralement, M > N parce qu'on a tendance à avancer dans l'ordre des pages plutôt que de revenir... Par ex. N = 2, M = 3)
    - Tu n'affiches le numéro de la page que si le numéro de page est >= ($pageCourante - N) ou <= ($pageCourante + M)

    Avec ça, tu devrais pouvoir t'en tirer... Attention aux pièges de "dépassement" (genre, quand ta page courante est 2, n'essaie pas d'afficher la page $pageCourante - 2 = 0 !)

    Ah, et si je peux me permettre un autre conseil, essaie de 1. donner des noms de variable plus explicite ($p c'est pas terrible...) et 2. de commenter plus "utile" (//Si $p==0 on lui assigne la valeur 1 ne sert pas à grand chose, on voit bien le code en dessous. Par contre, la grosse zone dans la boucle, elle, n'est pas commentée alors que c'est là que tout se passe...)

    Bonne chance pour le code

  15. #15
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    merci cold hand

    je vais essayer de m'en sortir

    @+

  16. #16
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    c'est bon j'ai trouvé

    merci à tous

    Aurore

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/12/2016, 03h07
  2. Réponses: 1
    Dernier message: 19/03/2013, 22h22
  3. Comment afficher les données sous cette forme?
    Par hittony dans le forum Cognos
    Réponses: 0
    Dernier message: 07/06/2010, 16h23
  4. Réponses: 8
    Dernier message: 07/03/2007, 08h34
  5. [MySQL] Affichage par page page : pages blanches à la fin
    Par carelha dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/04/2006, 13h27

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