Pagination la galère....

Résolu/Fermé
Vlandy Messages postés 19 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 28 mai 2013 - 27 mai 2013 à 17:25
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 28 mai 2013 à 17:50
Salut a tous,

Je désespère depuis 1 semaine...
Je ne trouve aucun tuto sur le net mais vraiment aucun qui explique de façon clair et précise comment faire une VRAI pagination automatique :/ !

Je veux dire par automatique une pagination qui fait ...7,8,9,[10],11,12,13... et qui avance toute seule et pas une pagination du type 1 2 3 4 5 6 7 8 9 [10] ... ect qui va jusqu'a afficher 100 pages si on a 100 pages.

voici mon code actuel qui ne me satisfait pas et qui va vous montrer de quoi je parles
<?php

$page = (isset ($_GET['page']) && is_numeric ($_GET['page'])) ? $_GET['page'] : 1;

$nbr = $bdd->q("SELECT count(*) as nbr FROM table");

$messagesParPage = 8;
$nombreDePages = ceil($nbr[0]->nbr/$messagesParPage );


if(isset($_GET['page'])&& $_GET['page']>0 && $_GET['page']<=$nombreDePages){
	$pageActuelle = intval($_GET['page']);
     if($pageActuelle>$nombreDePages) 
     {
          $pageActuelle=$nombreDePages;
     }
}
else 
{
     $pageActuelle=1;     
}

$premiereEntree=($pageActuelle-1)*$messagesParPage;



$ligne = $bdd->q ="SELECT * FROM table ORDER BY date DESC LIMIT ".$premiereEntree.', '.$messagesParPage."";

?>


		<?php
echo '<p align="center">Page : '; 
for($i=1; $i<=$nombreDePages; $i++) 
{
    
     if($i==$pageActuelle) 
     {
         echo ' [ '.$i.' ] '; 
     }	
     else 
     {
          echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
     }
	 		 
}
echo '</p>';


?>
D'avance un gros merci a celui qui prendra le temps de m'aider .

Bonne soirée.

7 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
27 mai 2013 à 18:33
salut essayes comme ça:

<?php

$page = (isset ($_GET['page']) && is_numeric ($_GET['page'])) ? $_GET['page'] : 1;

$nbr = $bdd->q("SELECT count(*) as nbr FROM table");

$messagesParPage = 8;
$nombreDePages = ceil($nbr[0]->nbr/$messagesParPage );
$premiereEntree=($page-1)*$messagesParPage;
$ligne = $bdd->q ="SELECT * FROM table ORDER BY date DESC LIMIT ".$premiereEntree.', '.$messagesParPage."";

?>


		<?php
echo '<p align="center">Page : '; 
for($i=1; $i<=$nombreDePages; $i++) 
{
    
     if($i==$page) 
     {
         echo ' [ '.$i.' ] '; 
     }	
     else 
     {
          echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
     }
	 		 
}
echo '</p>';



?> 
1
Vlandy Messages postés 19 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 28 mai 2013
27 mai 2013 à 23:52
Bonsoir Alain_42,

Merci d'avoir pris le temps de répondre mais j'ai l'impression que vous m'avez donné le même code car j'obtiens le même résultat

http://img843.imageshack.us/img843/4104/testgz.jpg

je vous est mis dans le lien ci dessus ma pagination actuel qui est vraiment trop grosse et en rouge la pagination que je voudrais essayer de mettre en place. Une pagination vraiment courte ou on ne vois pas toute les pages et qui avance toute seule.


cordialement. bonne soirée
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 mai 2013 à 09:32
j'avais surtout simplifié un peu ton code, mais n'avait pas compris que tu ne voulait afficher qu'une partie de la "liste" des numéros de pages

je vais regarder ça de plus près
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 mai 2013 à 11:33
vas voir ce site pour une sol en jquery javascript
http://www.javascriptfr.com

ou essayes de t'inspirer de ça:
<?php

$page = (isset ($_GET['page']) && is_numeric ($_GET['page'])) ? $_GET['page'] : 1;

//$nbr = $bdd->q("SELECT count(*) as nbr FROM table");

$messagesParPage = 8;
$nombreDePages = 50;
//$nombreDePages = ceil($nbr[0]->nbr/$messagesParPage );
//$premiereEntree=($page-1)*$messagesParPage;
//$ligne = $bdd->q ="SELECT * FROM table ORDER BY date DESC LIMIT ".$premiereEntree.', '.$messagesParPage."";

?>

<?php
//pagination, on va afficher 7 numéros puis des ..... puis les 3 dernièrs numéros
echo '<p align="center">Page : ';
//7 num

if($page<6){
	for($i=1; $i<=7; $i++){    
		 if($i==$page){
			 echo ' [ '.$i.' ] '; 
		 }else{
			  //echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
			  echo ' <a href="pagination_vue_partielle.php?page='.$i.'">'.$i.'</a> ';
		 }
	} 
	 echo '.........';
	for($i=($nombreDePages-3); $i<=$nombreDePages; $i++){  
     
          //echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
          echo ' <a href="pagination_vue_partielle.php?page='.$i.'">'.$i.'</a> ';
    }		 
}elseif($page>=6 && $page < $nombreDePages-6){
	 echo ' <a href="pagination_vue_partielle.php?page=1">1</a> ';
	 echo '.........';
	 for($i=($page-3); $i<=($page+3); $i++){  
     
          //echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
          echo ' <a href="pagination_vue_partielle.php?page='.$i.'">'.$i.'</a> ';
    }
	echo '.........';
	for($i=($nombreDePages-3); $i<=$nombreDePages; $i++){  
     
          //echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
          echo ' <a href="pagination_vue_partielle.php?page='.$i.'">'.$i.'</a> ';
    }
}elseif($page>=$nombreDePages-6 && $page <= $nombreDePages){
	 echo ' <a href="pagination_vue_partielle.php?page=1">1</a> ';
	 echo '.........';
	 for($i=($nombreDePages-8); $i<=($nombreDePages); $i++){  
     
          //echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
          echo ' <a href="pagination_vue_partielle.php?page='.$i.'">'.$i.'</a> ';
    }
}
echo '</p>';



?> 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vlandy Messages postés 19 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 28 mai 2013
28 mai 2013 à 14:36
Alain_42 Je sais pas comment vous remercier c'est encore mieux et plus élaboré que ce que je souhaité a la base ! Le fait de voir la première et dernière page en tout temps est vraiment bien.

Je vais décortiquer votre code pour essayer de comprendre comment vous avez fait.

En tout cas j'aurais jamais pu faire ça de moi même donc un grand merci.

Passez une bonne journée.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 mai 2013 à 17:22
qqs petites modifs

on avait perdu la page active [..]

et mise en couleur de celle ci
<?php

$page = (isset ($_GET['page']) && is_numeric ($_GET['page'])) ? $_GET['page'] : 1;

//$nbr = $bdd->q("SELECT count(*) as nbr FROM table");

$messagesParPage = 8;
$nombreDePages = 50;
//$nombreDePages = ceil($nbr[0]->nbr/$messagesParPage );
//$premiereEntree=($page-1)*$messagesParPage;
//$ligne = $bdd->q ="SELECT * FROM table ORDER BY date DESC LIMIT ".$premiereEntree.', '.$messagesParPage."";

?>

<?php
//fonction affichage_numeros
function affichage_numeros($page,$i){
	if($i==$page){
		echo ' [<span style="color:red;"> '.$i.'</span> ] '; 
	}else{
		//echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
		echo ' <a href="pagination_vue_partielle.php?page='.$i.'">'.$i.'</a> ';
	}
}
//pagination, on va afficher 7 numéros puis des ..... puis les 3 dernièrs numéros
echo '<p align="center">Page : ';
//7 num

if($page<6){
	for($i=1; $i<=7; $i++){    
		 affichage_numeros($page,$i);
	} 
	 echo '.........';
	for($i=($nombreDePages-3); $i<=$nombreDePages; $i++){  
     
          //echo ' <a href="index.php?page='.$i.'">'.$i.'</a> ';
          echo ' <a href="pagination_vue_partielle.php?page='.$i.'">'.$i.'</a> ';
    }		 
}elseif($page>=6 && $page < $nombreDePages-6){
	 echo ' <a href="pagination_vue_partielle.php?page=1">1</a> ';
	 echo '.........';
	 for($i=($page-3); $i<=($page+3); $i++){  
		affichage_numeros($page,$i);
    }
	echo '.........';
	for($i=($nombreDePages-3); $i<=$nombreDePages; $i++){  
		affichage_numeros($page,$i);
    }
}elseif($page>=$nombreDePages-6 && $page <= $nombreDePages){
	 echo ' <a href="pagination_vue_partielle.php?page=1">1</a> ';
	 echo '.........';
	 for($i=($nombreDePages-8); $i<=($nombreDePages); $i++){  
		affichage_numeros($page,$i);
    }
}
echo '</p>';



?> 
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 mai 2013 à 17:50
ou en BEAUCOUP mieux avec une classe (voir tuto ici http://www.snoupix.com/systeme-de-pagination_tutorial_25.html)
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
	.pagination {
            font-family:georgia;
            font-size:0.9em;
            margin:10px;
            padding:10px;
        }
        .pagination .courante {
            background:#32B1D0 none repeat scroll 0 0;
            border:1px solid #918A7B;
            color:white;
            border-radius:0.5em;
            -moz-border-radius:0.5em;
            margin-left:5px;
            padding:4px 8px;
            text-decoration:none;
        }
        .pagination .desactive {
            color:#918A7B;
            margin-left:5px;
            padding:3px 7px;
            text-decoration:none;
        }
        .pagination a {
            background:#f7f5ef none repeat scroll 0 0;
            background-image:url('background.png');
            background-repeat:repeat-x;
            border:1px solid #918A7B;
            color:black;
            margin-left:5px;
            border-radius:0.5em;
            -moz-border-radius:0.5em;
            padding:3px 7px;
            text-decoration:none;
        }
        .pagination a:hover {
            background:#ECE6D7 none repeat scroll 0 0;
            border:1px solid #555;
            color:#4B4438;
        }
</style>
</head>
<?php
$page = (isset ($_GET['page']) && is_numeric ($_GET['page'])) ? $_GET['page'] : 1;

//$nbr = $bdd->q("SELECT count(*) as nbr FROM table");

$messagesParPage = 8;
$nombreDePages = 50;
//$nombreDePages = ceil($nbr[0]->nbr/$messagesParPage );
//$premiereEntree=($page-1)*$messagesParPage;
//$ligne = $bdd->q ="SELECT * FROM table ORDER BY date DESC LIMIT ".$premiereEntree.', '.$messagesParPage."";

//Système de pagination utilisant la classe class.pagination.php
        require_once('class.pagination.php');
        Pagination::affiche('index.php','page',$nombreDePages ,$page,2);
?>



et la classe fichier class.pagination.php
<?php
/**
 * Méthode qui gère la pagination
 * @author Snoupix.com tutoriaux, actualités et encylopédie sur la programmation et le design Web...
 * Ce code est sous licence Creative Commons: Enjoy!
 */
   class Pagination{
        /**
         * Fonction qui retourne une div de pagination en fonction de plusieurs paramètres
         * @return $html une chaine contenant une div.
         * @param object $chemin
         * @param object $nomget
         * @param object $total
         * @param object $courante[optional]
         * @param object $affichage[optional]
         */
        public static function affiche($chemin,$nomget,$total,$courante=1,$affichage=2){
            //variable contenant le code HTML a retourner
            $html = '';
            //Si il n'y a pas plus d'une page on renvoit rien...
            if($total<=1)
                return $html;
 
            $precedent = $courante-1;
            $suivant = $courante+1;
            $textePrecedent = '« préc';
            $texteSuivant = 'suiv »';
 
            $html .= '<div class="pagination">';
 
            /*Boutons précédent*/
            if ($courante == 2) // si on est sur la page 2, Nous retournons sur la page initiale (permet d'éviter les doublons index.php et index.php?page=1)
                $html.= Pagination::lien($chemin,$textePrecedent);
            elseif($courante > 2) // si la page courante est supérieure à 2 le bouton précédent renvoit sur la page dont le numéro est immédiatement inférieur
                $html.= Pagination::lien($chemin,$textePrecedent,$nomget,$precedent);
            else // sinon on désactive le bouton précédent
                $html.= '<span class="desactive">'.$textePrecedent.'</span>';
 
            /*Affichage des numéros des pages*/
 
            if($total < 7 + $affichage*2){
                //affiche tous les numéros
                $html.= ($courante == 1) ? '<span class="courante">1</span>' : Pagination::lien($chemin,'1',$nomget,1);
 
                // On boucle toutes les pages restantes boucle for
                for ($i = 2; $i <= $total; $i++){
                    if ($i == $courante) // La page courante est affichée différemment
                        $html.= '<span class="courante">'.$i.'</span>';
                    else
                        $html.= Pagination::lien($chemin,$i,$nomget,$i);
                }
            } elseif($total > 5 + ($affichage * 2)){
                /*Il y'en a trop donc il va falloir des "..." */
                if($courante < 1+($affichage * 2)){
                    $html.= ($courante == 1) ? '<span class="courante">1</span>' : Pagination::lien($chemin,'1',$nomget,1);
 
                     // On boucle toutes les pages restantes boucle for
                   for($i = 2; $i < 4 + ($affichage * 2); $i++){
                        if ($i == $courante)// La page courante est affichée différemment
                            $html.= '<span class="courante">'.$i.'</span>';
                        else
                            $html.= Pagination::lien($chemin,$i,$nomget,$i);
                    }
                      // les ... pour marquer la troncature
                    $html.= " ... ";
 
                    // et enfin les deux dernières pages
                    $html.= Pagination::lien($chemin,$total-1,$nomget,$total-1);
                    $html.= Pagination::lien($chemin,$total,$nomget,$total);
                }elseif($total - ($affichage * 2) > $courante && $courante > ($affichage * 2)){
                    // on affiche les deux premières pages
                    $html.= Pagination::lien($chemin,'1',$nomget,1);
                    $html.= Pagination::lien($chemin,'2',$nomget,2);
 
                    // les ... pour marquer la troncature
                    $html.= " ... ";
 
                    // puis sept pages : les trois précédent la page courante, la page courante, puis les trois lui succédant
                    for ($i= $courante - $affichage; $i<= $courante + $affichage; $i++){
                        if ($i== $courante)
                            $html.= '<span class="courante">'.$i.'</span>';
                        else
                            $html.= Pagination::lien($chemin,$i,$nomget,$i);
                    }
 
                    // les ... pour marquer la troncature
                    $html.= " ... ";
 
                    // et enfin les deux dernière spages
                    $html.= Pagination::lien($chemin,$total-1,$nomget,$total-1);
                    $html.= Pagination::lien($chemin,$total,$nomget,$total);
                }
                 else{
                    // on affiche les deux premières pages
                    $html.= Pagination::lien($chemin,'1',$nomget,1);
                    $html.= Pagination::lien($chemin,'2',$nomget,2);
 
                    // les ... pour marquer la troncature
                    $html.= " ... ";
 
                    // et enfin les neuf dernières pages
                    for ($i = $total - (2 + ($affichage * 2)); $i <= $total; $i++){
                        if ($i == $courante)
                            $html.= '<span class="courante">'.$i.'</span>';
                        else
                            $html.= Pagination::lien($chemin,$i,$nomget,$i);
                    }
               }
            }
 
            /*Bouton suivant*/
            if ($courante < $total)
                $html.= Pagination::lien($chemin,$texteSuivant,$nomget,$suivant);
            else
                $html.= '<span class="desactive">'.$texteSuivant.'</span>';
 
            $html .= '</div>';
 
            echo $html;
        }
 
        /**
         * Méthode qui renvoit un lien en fonction de plusieurs paramètres
         * @return $lien un lien
         * @param object $chemin notre fichier
         * @param object $texte texte du lien
         * @param object $parametre[optional] parametre GET
         * @param object $valeur[optional] valeur du parametre GET
         */
        public static function lien($chemin,$texte,$parametre='',$valeur=''){
            $lien = '<a href="'.$chemin;
 
            if(!empty($parametre))
                $lien .= '?'.$parametre.'='.$valeur;
 
            $lien .= '">'.$texte.'</a>';
            return $lien;
        }
   }
?>
0