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 ? :)
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.
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 :)
Bonjour,
j'ai trouvé ça: http://flaviusmatis.github.io/simplePagination.js/
je vais essayer :)
Merci bien pour ce partage !
Je n'ai pas tout regardé en détails, mais plus "subtil" que ma proposition précédente :)