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

PHP & Base de données Discussion :

Pagination, point de suspension si trop de pages [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut Pagination, point de suspension si trop de pages
    Bonjour, je fais face à un problème, je suis actuellement entrain d'améliorer mon système de pagination je lui ai donc rajouté 4 boutons en plus :

    - Suivant
    - Précédent
    - Dernière page
    - Première page

    Or j'aimerais maintenant pouvoir gérer une grosse quantité d'utilisateurs dans ma base de donnée et si j'importe trop d'utilisateurs, la pagination devient rapidement ingérable et inutile au vu des nombres de page sauf que je n'arrive pas à trouver la condition me permettant de placer des petits points par exemple au milieu de ma pagination si page > 10 ou quelque chose comme ça..

    Si quelqu'un peut m'aider, voici le code entier de la pagination :

    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
    // Requête : TOUT
    $requete_total = $db->prepare($sql_requete);
    $requete_total->execute($sql_params);
    $elem_total = $requete_total->rowCount();
    // ----------------------
    // Pagination
    $elem_page = 10;
    $page_total = ceil($elem_total/ $elem_page);
    if (!empty($_GET['page']) && $_GET['page'] > 0) {
        $pageCourante = intval($_GET['page']);
    } else {
        $pageCourante = 1;
    }
    if ($pageCourante>$page_total) {
        $pageCourante = $page_total;
    }
    $depart_page = ($pageCourante-1) * $elem_page;
    // ----------------------
    // Requête : pour cette page
    $sql_requete_page = $sql_requete . " LIMIT ".$depart_page." , ".$elem_page." ";
    $requete_page = $db->prepare($sql_requete_page);
    $requete_page->execute($sql_params);
    Avec l'ui de la pagination :

    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
                    <ul class="pagination justify-content-center">
                      <li class="page-item">
                        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo 1; ?>"><i class="fas fa-angle-double-left"></i></a>
                        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $pageCourante - 1; ?>"><i class="fas fa-chevron-left"></i></a>
            <?php		for ($i=1; $i<=$page_total; $i++) { ?>
                    <?php
            if ($i == $pageCourante) { ?>
              <li class="page-item active"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a>
      <?php      } else { ?>
        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a>
      <?php }
    }?>
    <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $pageCourante + 1; ?>"><i class="fas fa-chevron-right"></i></a>
      <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><i class="fas fa-angle-double-right"></i></a>
            </li>
            </ul>
    En vous remerciant,

  2. #2
    Invité
    Invité(e)

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    Salut jreaux,

    Je te remercie, je check ça, je reviens vers toi après avoir essayer d'adapter ça !

    Merci beaucoup

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    Jreaux,

    J'ai du mal à adapter à mon code ton système de pagination, j'ai tenter mais il y a seulement les points qui s'affichent et non les chiffres..

    Code :

    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
       <?php		}
            // -------------
            $numLimit		= 3; 	// Limite : nombre de pages avant/après la page courante
            $sep			= '';	// Séparateur '', '-', '|', '/' : entre les numéros de pages
            // -------------
            $args 			= preg_replace('#(pg=[0-9]+&?)#', '', $_SERVER['QUERY_STRING']);
            $args 			= (!empty($args))?	'&'.$args : '';
            // -------------
              ?>
     
        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo 1; ?>"><i class="fas fa-angle-double-left"></i></a>
                        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $pageCourante - 1; ?>"><i class="fas fa-chevron-left"></i></a>
            <?php		for ($i=1; $i<=$page_total; $i++) { ?>
              <?php if ($i==1 && $page_total > ($numLimit+1)) {
                  {
                          echo '<li class="page-item"><a class="page-link" href="list.php?page='.$i.$args.'"</a> '.$sep.'...'.$sep;
                      }
                  if (($page_total-1-$numLimit)<$i && $i<($page_total+1+$numLimit)) {
                      if ($i == $pageCourante) { // page courante?>
              <li class="page-item active"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a>
      <?php
              } else { ?>
        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a>
      <?php }
                  }
              }
            }?>
            <?php if ($i==$page_total && $page_total<($page_total-$numLimit)) {
                echo '...'.$sep.' <li class="page-item"><a class="page-link" href="list.php?page='.$i.$args.'" title="Page '.$i.'">'.$i.'</a>';
            }?>
    Il y a uniquement mes boutons suivant / précédent etcc et 3 point de suspension au milieu..

  5. #5
    Invité
    Invité(e)
    Par défaut
    1- Il s'agit d'une fonction (que tu peux appeler pagination_pages() ).
    Il suffit de l'adapter.

    2- Et mettre là où tu veux la pagination :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php pagination_pages( $numPage, $nbreTotalPages ); ?>
    Ce n'est quand même pas si compliqué, si ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    Bah le problème c'est que je dois revoir tout l'affichage de mon tableau et tout le système de pagination du coup.. ?
    Y'aurait-il pas plus simple de que de reprendre à 0, du style une condition permettant de placer des points de suspension au milieu ou quelque chose comme ça?

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Oui, il te suffit juste de reprendre le code de jreaux et de l'intégrer dans ta boucle for. Quelque chose comme ça :
    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
    <?php for ($i=1; $i<=$page_total; $i++) {  ?>
        <?php
        // 1ère page
        if($i==1 && $pageCourante>($numLimit+1)) 
        {
            ?>
            <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a></li>
            <li class="page-item">...</li>
            <?php
        }
        // page courante + $numLimit pages avant et après
        if(($pageCourante-1-$numLimit)<$i && $i<($pageCourante+1+$numLimit))
        {
            if($i==$pageCourante) { // page courante
            ?>
            <li class="page-item active"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a></li>
            <?php
            } else {
            ?>
            <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a></li>
            <?php
            }
        }
        // dernière page
        if($i==$nbreTotalPages && $pageCourante<($nbreTotalPages-$numLimit)) 
        {
            ?>
            <li class="page-item">...</li>
            <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a></li>
            <?php
        }
    <?php} //endfor ?>
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    Bonjour,

    Je vous remercie pour vos réponses finalement j'ai réussi en modifiant quelques lignes de mon code de base et en y ajoutant un petit algo de deux lignes trouvé sur internet :

    Voici le code si ça peut aider quelqu'un un jour :

    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
    <?php
            $loopcounter = ((($pageCourante + 2) <= $page_total) ? ($pageCourante + 2) : $page_total);
            $startCounter =  ((($pageCourante - 2) >= 3) ? ($pageCourante - 2) : 1);
            ?>
                          </tbody>
                        </table>
                      </div>
                          &nbsp;
                    <ul class="pagination justify-content-center">
                      <li class="page-item">
                        <?php if ($pageCourante > 1) { ?>
                        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo 1; ?>"><i class="fas fa-angle-double-left"></i></a>
                        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $pageCourante - 1; ?>"><i class="fas fa-chevron-left"></i></a>
                        <?php }?>
            <?php		for ($i = $startCounter; $i <= $loopcounter; $i++) {
                if ($i == $pageCourante) { ?>
                <li class="page-item active"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a>
      <?php      } else { ?>
        <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i; ?>"><?php echo "$i"; ?></a>
      <?php }
            }?>
            <?php if ($pageCourante != $page_total) { ?>
    <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $pageCourante + 1; ?>"><i class="fas fa-chevron-right"></i></a>
      <li class="page-item"><a class="page-link" href="list.php?page=<?php echo $i + 1; ?>"><i class="fas fa-angle-double-right"></i></a>
      <?php } ?>
    Je met le sujet sur résolu, merci beaucoup de votre aide !

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

Discussions similaires

  1. Points de suspension pour un texte trop long
    Par Robjerey dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 26/02/2015, 10h40
  2. Réponses: 2
    Dernier message: 16/01/2008, 16h16
  3. Réponses: 2
    Dernier message: 18/12/2007, 10h03
  4. requte avec points de suspension
    Par Luther13 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/12/2005, 16h56
  5. LEFT et points de suspension
    Par dany13 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/08/2005, 18h30

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