[RESOLU] Pagination limitée

Eléphant du PHP | 233 Messages

21 avr. 2014, 23:25

Bonjour,
je voudrais ajouter à ma pagination des pointillés pour limiter s'il y à trop de pages, exemple : [1] [2].....[6] [7]
Aujourd'hui j'affiche sans limite, c'est pas très esthétique :?

voici mon code actuel :

Merci d'avance de vos suggestions :D
<?php
$limit_par_page = 1; 
	if (isset($_GET['page']) and !empty($_GET['page']) )
	{
		$page = intval($_GET['page']);
	}
	else
	{
		$page = 1;
	}
	$from = ($page - 1) * $limit_par_page;

	
	
	$reponse = mysql_query('SELECT * FROM membres  ORDER BY id DESC LIMIT  '.$from.', '.$limit_par_page)or die(mysql_error());

.....
.....
$requete = mysql_query('SELECT COUNT(id) AS nb_membres FROM membres');
	
	$donnees = mysql_fetch_assoc($requete);

$nb_pages = ceil($donnees['nb_membres'] / $limit_par_page);
	if ($nb_pages > 1) echo $lang['aller_a_la_page'];
	
	for ($i=1 ; $i<=$nb_pages ; $i++)
	{
	
		if ($i == $page)
		{
		
		        echo ' '.$i.'';
				}
				
		else
		{
			echo '&nbsp;&nbsp;<a href="liste-des-membres-'.$i.'.html">[ '.$i.' ]</a>';
		}
	}
?>

Eléphant du PHP | 58 Messages

22 avr. 2014, 08:21

Un bon tuto dans lequel tu trouveras certainement ton bonheur ! http://www.petit-kiwi.com/php-creation- ... on-avancee

Eléphant du PHP | 233 Messages

22 avr. 2014, 10:25

Bonjour,

merci pour ce lien, mais je ne veux pas quelque chose de trop compliquer à mettre en place.
Je pense qu'on peut améliorer mon code mais je ne sais pas de quelle manière...

Eléphant du PHP | 58 Messages

22 avr. 2014, 10:33

Le fait de vouloir créer des troncatures compliquera forcément ton code puisque tu auras alors de multiples conditions pour l'affichage de tes pages.
Je te conseille de lire ce tuto, tu trouveras des similitudes avec ton code et tu pourras alors en retirer seulement ce qui est nécessaire pour l'affichage que tu veux.

Eléphant du PHP | 233 Messages

22 avr. 2014, 16:44

voici le code finale qui fonctionne parfaitement. Ca peut aider si jamais...
<?php

if( isset($_GET['page']) && is_numeric($_GET['page']) )
        $page = $_GET['page'];
    else
        $page = 1;
      
    
    $pagination =20;
   
    $limit_start = ($page - 1) * $pagination;

	
	$reponse = mysql_query('SELECT * FROM membres ORDER BY membres.id DESC LIMIT  '.$limit_start.', '.$pagination.'')or die(mysql_error());

....
....

$requete = mysql_query('SELECT COUNT(id) AS nb_membres FROM membres');
	
	$donnees = mysql_fetch_assoc($requete);
    $nb_total= $donnees['nb_membres'];

	 $nb_pages = ceil($nb_total / $pagination);
     if ($nb_pages > 1) { echo'Allez à la page : ';
	 
	 if ($page > 1 )
        echo " <a href=\"liste-des-membres-".($page-1).".html\">Précédent</a> ";
    else
        echo "Précédent ";
	 
	 }
    $un = 1;
    $premier = max(1, $page - $un);
    $dernier = min($nb_pages, $page + $un);
    if ($premier > 1) {
    
    echo " <a href=\"liste-des-membres-1.html\">[ 1 ]</a> ";
    if ($premier > 2) {
       
        echo " ... ";
        }
    }
      
   
    for ($i = $premier ; $i <= $dernier ; $i++) {
	if ($nb_pages > 1) {
        if ($i == $page )
            echo "[ $i ]";
        else
            echo " <a href=\"liste-des-membres-$i.html\">[ $i ]</a> ";
    }
	}
    if ($dernier < $nb_pages) {
    if ($dernier < $nb_pages - 1) {
        
        echo " ... ";
    }
   
    echo "<a href=\"liste-des-membres-$nb_pages.html\">[ $nb_pages ]</a>";
	
}

		 if ($nb_pages > 1) {
    if ($page < $nb_pages )
        echo " <a href=\"liste-des-membres-".($page+1).".html\">Suivant</a> ";
    else
        echo "Suivant";
		}
 ?>