Bonjour a tous, j'ai mis en place un système de pagination mais le problème est que si il y a plusieurs pages, ça fait un peut bouillon. Ma question est : comment faire pour générer les "..." comme google par exemple et avoir la possibilité d'avancer et de reculer de 10 pages par exemple.
Merci pour vos futurs réponses

5 réponses


Grafikart
Réponse acceptée

C'est des mathémaiques jpense que tu peux t'en sortir tout seul (google ne propose pas de ... mais de prendre X chiffre avant et après la page courante. Je te laisse imaginer et faire le script :)

wYm
Auteur
Réponse acceptée

J'ai suivi ton conseil et j'ai planché dessus, ça ma pris une journée :) mais j'ai trouvé la solution pour ceux qui cherche toujours j'ai mis les id dans un tableau où chaque case contient 10 pages, puis chaque page contient un certain nombre d'éléments, il suffit de parcourir la tableau qui contient la page courante. Sinon pour avancer j'ai mis une flèche qui incrémente la dernière page du tableau de la case qui contient la page courante. Oui je sais comme ça vous vous dites que je suis un fous et je dit n'importe quoi, essayez :)!?!

Bonjour ,

<u>je cherche le même système de pagination est je n'arrive toujours pas</u>:

j'ai arrivée a faire la pagination est je n'arrive pas a faire une limite des pages.

J'ai passer plus de 5 jour a cherché sans résultat ,mais comme je suis un débutant j'aimerais bien un petit coup de main ou un model ou même un supplément de tutoriel car je suis a la limite de laisser tomber ...

Je remercie Grafikart car j'ai vraiment beaucoup progresser avec ses tutoriel.

Cordialement Sébastien,

Si ça peut t'aider j'utilise une fonction pour la pagination qui gère ce genre de truc tu n'auras qu'a faire le css ;) et à comprendre le code mais il est commenté donc ça devrait pas être trop long
Elle doit pouvoir s'améliorer je pense donc si tu as des idées je suis preneur

/**
 * function paginate
 *
 * @param integer $totalPages Nombre total de pages
 * @param integer $currentPage Numero de la page courrante
 * @param integer $adjacent Nombre d'element autour de l'élément courant
 * @access  public
 * @author  koéZionCMS          
 * @return varchar Chaine de caractère contenant la pagination
 * @version 0.1 - by FI
 */
    function paginate($totalPages, $currentPage, $adjacent = 3) {

        //Déclaration des variables
        $prev = $currentPage - 1; //numéro de la page précédente
        $next = $currentPage + 1; //numéro de la page suivante
        $n2l = $totalPages - 1; //numéro de l'avant-dernière page (n2l = next to last)

        //Initialisation : s'il n'y a pas au moins deux pages, l'affichage reste vide
        $pagination = '';

        //Gestion des éventuels paramètres supplémentaires passés en GET
        $moreParams = ''; //Par défaut pas de paramètres supplémentaires        
        if(count($_GET) > 0) {
            //Parcours des paramètres passés en GET
            foreach($_GET as $k => $v) { $moreParams .= '&'.$k.'='.$v; }
        }

        //Sinon
        if($totalPages > 1) {

            $pagination .= '<a href="?page=1'.$moreParams.'" title="'._("Première page (1)").'" class="first"><<</a>';

            /////////////////////////////////////////////
            // Début affichage du bouton précédent //           
            //la page courante est > 2, le bouton renvoit donc sur la page précédente
            if($currentPage > 2) { $pagination .= '<a href="?page='.$prev.$moreParams.'" title="'._("Page précédente").' ('.$prev.')" class="prec"><</a>'; } 
            //dans tous les autres, cas la page est 1 : désactivation du bouton [précédent]
            else { $pagination .= '<a href="?page=1'.$moreParams.'" title="'._("Page précédente").' (1)" class="prec"><</a>'; }
            /////////////////////////////////////////////

            ///////////////////////////////////
            // Début affichage des pages //
            //On reprend le cas de 3 numéros de pages adjacents (par défaut) de chaque côté du numéro courant
            //-> CAS 1 : il y a au plus 12 pages, insuffisant pour faire une troncature
            //-> CAS 2 : il y a au moins 13 pages, on effectue la troncature pour afficher 11 numéros de pages au total

            //CAS 1
            if($totalPages < 7 + ($adjacent * 2)) {

                //Ajout de la page 1
                if($currentPage == 1) { $pagination .= '<a href="?page=1'.$moreParams.'" title="Page 1" class="select">1</a>'; } 
                else { $pagination .= '<a href="?page=1'.$moreParams.'" title="Page 1">1</a>'; }

                //Pour les pages restantes on utilise une boucle for
                for($i=2; $i<=$totalPages; $i++) {

                    if($i == $currentPage) { $pagination .= '<a href="?page='.$i.$moreParams.'" title="Page '.$i.'" class="select">'.$i.'</a>'; } 
                    else { $pagination .= '<a href="?page='.$i.$moreParams.'" title="Page '.$i.'">'.$i.'</a>'; }
                }
            }

            //CAS 2 : au moins 13 pages, troncature
            else {
                //Troncature 1 : on se situe dans la partie proche des premières pages, on tronque donc la fin de la pagination.
                //l'affichage sera de neuf numéros de pages à gauche ... deux à droite
                if($currentPage < 2 + ($adjacent * 2)) {

                    //Ajout de la page 1
                    if($currentPage == 1) { $pagination .= '<a href="?page=1'.$moreParams.'" title="Première page (1)" class="select">1</a>'; } 
                    else { $pagination .= '<a href="?page=1'.$moreParams.'" title="'._("Première page (1)").'">1</a>'; }

                    //puis des huit autres suivants
                    for($i = 2; $i < 4 + ($adjacent * 2); $i++) {

                        if($i == $currentPage) { $pagination .= '<a href="?page='.$i.$moreParams.'" title="Page '.$i.'" class="select">'.$i.'</a>'; } 
                        else { $pagination .= '<a href="?page='.$i.$moreParams.'" title="Page '.$i.'" class="first">'.$i.'</a>'; }
                    }

                    $pagination .= '<span class="no_action">...</span>';    

                    //et enfin les deux derniers numéros
                    $pagination .= '<a href="?page='.$n2l.$moreParams.'" title="Page '.$n2l.'">'.$n2l.'</a>';                   
                    $pagination .= '<a href="?page='.$totalPages.$moreParams.'" title="Page '.$totalPages.'">'.$totalPages.'</a>';
                }

                //Troncature 2 : on se situe dans la partie centrale de notre pagination, on tronque donc le début et la fin de la pagination.
                //l'affichage sera deux numéros de pages à gauche ... sept au centre ... deux à droite
                elseif( (($adjacent * 2) + 1 < $currentPage) && ($currentPage < $totalPages - ($adjacent * 2)) ) {

                    //Affichage des numéros 1 et 2
                    $pagination .= '<a href="?page=1'.$moreParams.'" title="'._("Première page (1)").'">1</a>';
                    $pagination .= '<a href="?page=2'.$moreParams.'" title="Page 2">2</a>';

                    $pagination .= '<span class="no_action">...</span>';

                    //les septs du milieu : les trois précédents la page courante, la page courante, puis les trois lui succédant
                    for($i = $currentPage - $adjacent; $i <= $currentPage + $adjacent; $i++) {

                        if($i == $currentPage) { $pagination .= '<span class="select">'.$i.'</span>'; } 
                        else { $pagination .= '<a href="?page='.$i.$moreParams.'" title="Page '.$i.'">'.$i.'</a>'; }
                    }

                    $pagination .= '<span class="no_action">...</span>';

                    //et les deux derniers numéros
                    $pagination .= '<a href="?page='.$n2l.$moreParams.'" title="Page '.$n2l.'">'.$n2l.'</a>';
                    $pagination .= '<a href="?page='.$totalPages.$moreParams.'" title="Page '.$totalPages.'" class="first">'.$totalPages.'</a>';
                }

                //Troncature 3 : on se situe dans la partie de droite, on tronque donc le début de la pagination.
                //l'affichage sera deux numéros de pages à gauche ... neuf à droite
                else {

                    //Affichage des numéros 1 et 2
                    $pagination .= '<a href="?page=1'.$moreParams.'" title="'._("Première page (1)").'">1</a>';
                    $pagination .= '<a href="?page=2'.$moreParams.'" title="Page 2">2</a>';

                    $pagination .= '<span class="no_action">...</span>';

                    //puis des neufs dernières
                    for($i = $totalPages - (2 + ($adjacent * 2)); $i <= $totalPages; $i++) {

                        if($i == $currentPage) { $pagination .= '<span class="select">'.$i.'</span>'; }
                        else { $pagination .= '<a href="?page='.$i.$moreParams.'" title="Page '.$i.'">'.$i.'</a>'; }
                    }
                }               
            }
            ///////////////////////////////////

            ///////////////////////////////////////////
            // Début affichage du bouton suivant //
            if($currentPage == $totalPages) { $pagination .= '<span>></span>'; } 
            else { $pagination .= '<a href="?page='.$next.$moreParams.'" title="'._("Page suivante").' ('.$next.')" class="suiv">></a>'; }
            ///////////////////////////////////////////

            $pagination .= '<a href="?page='.$totalPages.$moreParams.'" title="'._("Dernière page").' ('.$totalPages.')" class="last">>></a>';
        }

        return ($pagination);
    }

Bonjour,

Je te remercie mais j'ai trouver la solution avec un peu de travail de calcul ...
j'ai sécher un moment mais j'y suis arrivée ...

Cordialement Sébastien.