Bonjour Grafikart !

J'ai suivi il y a longtemps le tuto en ligne sur la pagination en php, mais il serait intéressant de voir la version avancée de la pagination:
La pagination actuelle prend en compte tous les sujets à montrer, c'est à dire, créer autant de puces que de pages.
Il faudrait, limiter une fenêtre d'ouverture pour la pagination, démontrer comment procéder, en exemple:
Page active: 6ème page, fenêtre d'ouverture de 5:

<< ... 1 - 2 - 3 - 4 - 5 ... > >> Page 6 sur 19.

Non ? :)

5 réponses


Thokki
Auteur
Réponse acceptée

Alors, je me suis penché sur la pagination, et voilà ce que j'ai pondu:

Avé les variables:

/* définit le nombre d'articles */
 $nbArt = $datacount'nbArt'];

 /* définit le nombre de news par page */
 $perPage = 2; //Nombre d'articles par pages | Vous pouvez changer cette valeur selon votre besoin
 $nbPageLimit = 4; // Nombre de pages limites à afficher | Vous pouvez changer cette valeur selon votre besoin
 $nbPage = ceil($nbArt/$perPage);
 $pOffset = 2; // Nombre de pages à afficher avant les switches.
 $lastPage = ((int)(($nbArt + $perPage - 1) / $perPage )); // calcul de la dernière page.

le code, ATCHA !

echo '
<div class="pagination pagination-centered">
<ul>';
// Affichage saut à la 1ère page
    if($cPage > $pOffset){
echo '<li><a href="archives.php?p=1">«</a></li>'; 
}else{
echo '<li class="disabled"><span>«</span></li>';
}
// Affichage des deux 1ères pages - pages permanentes
for($i=1;$i<=$pOffset;$i++){        
echo '<li><a href="archives.php?p='.$i.'">'.$i.'</a></li>'; 
}
// Affichage de ... si page courante > page offset
if($cPage > $pOffset){                              
echo '<li class="disabled"><a href="#">...</a></li>'; 
}
// 
if($cPage < ($pOffset+$nbPageLimit)){
for($i=$pOffset+1;$i<=$cPage+(int)($nbPageLimit/2);$i++){       
if($i==$cPage){ 
// affichage page active
echo '<li class="active"><a href="#">'.$i.'</a></li>';
}else{
// affichage autres pages
echo '<li><a href="archives.php?p='.$i.'">'.$i.'</a></li>'; 
}
}
}                           
if($cPage >= ($pOffset+$nbPageLimit) && $cPage < ($lastPage-$nbPageLimit)){
for($i=$cPage-(int)($nbPageLimit/2);$i<=$cPage+(int)($nbPageLimit/2);$i++){     
if($i==$cPage){ 
// affichage page active
echo '<li class="active"><a href="#">'.$i.'</a></li>';
}else{
// affichage autres pages
echo '<li><a href="archives.php?p='.$i.'">'.$i.'</a></li>'; 
}
}
}
if($cPage >= ($lastPage-$nbPageLimit)){
for($i=$cPage-((int)($nbPageLimit/2));$i<=$lastPage-$pOffset;$i++){     
if($i==$cPage){ 
// affichage page active
echo '<li class="active"><a href="#">'.$i.'</a></li>';
}else{
// affichage autres pages
echo '<li><a href="archives.php?p='.$i.'">'.$i.'</a></li>'; 
}
}
}
// Affichage de ... si page courante < page fin
if($cPage < ($lastPage-$pOffset)){                              
echo '<li class="disabled"><a href="#">...</a></li>'; 
}
// Affichage des deux dernières pages - pages permantentes
for($i=($lastPage-$pOffset+1);$i<=$lastPage;$i++){      
echo '<li><a href="archives.php?p='.$i.'">'.$i.'</a></li>';
}
// Affichage saut à la dernière page
if($cPage < $lastPage-$pOffset){
echo '<li><a href="archives.php?p='.$lastPage.'">»</a></li>'; 
}else{
echo '<li class="disabled"><span>»</span></li>';
}
echo '
<li class="disabled"><a href="#"><span>page <b>'.$cPage.'</b>/'.$lastPage.'</span></a></li>
</ul>
</div>

je ne sais pas si c'est propre, mais à a le mérite de fonctionner :) Et compatible avec le tuto de pagination de Grafikart.

Tu as la base à toi d'adapter :) ce n'est pas over complexe :)

Thokki
Auteur

Je comprends bien mais je tatonne (normal quoi). J'ai créé une variable pour cette fenêtre, et en fonction du nombre de page, et de pages à afficher/page, ca déroule.. mais j'ai pas tout.
J'vais de toutes façons m'y plonger, il faut que j'arrive à le mettre en place sur mon site :)

Thokki
Auteur

Bonjour,
j'ai trouvé ça: http://flaviusmatis.github.io/simplePagination.js/

je vais essayer :)

Thokki
Auteur

Merci bien pour ce partage !
Je n'ai pas tout regardé en détails, mais plus "subtil" que ma proposition précédente :)