Bonjour à tous,
Suite a mon message ici => http://forum.alsacreations.com/topic-1-65241-1-Resolu-Comment-recuperer-les-informations-de-mon-tableau.html
Vu le nombre de membres qui est de 147, sur une page cela fait beaucoup. J'aurai voulu ajouter une pagination.
Je me retrouve avec un foreach qui est comme ceci :
Au dessus de mon foreach : (La varaible $nbmembers affiche le nombre de membres)
Ma fonction pagination :
Et pour finir je fait appelle a ma fonction qui est :
Je ne sait pas comment faire pour l'adapter a mon foreach on ma dit après ceci d'utiliser la classe LimitIterator http://php.net/manual/fr/class.limititerator.php.
Qui aurais une idée, une solution... Je vous remercie d'avance pour vos réponses
Modifié par subzeros (04 Jan 2013 - 21:15)
Suite a mon message ici => http://forum.alsacreations.com/topic-1-65241-1-Resolu-Comment-recuperer-les-informations-de-mon-tableau.html
Vu le nombre de membres qui est de 147, sur une page cela fait beaucoup. J'aurai voulu ajouter une pagination.
Je me retrouve avec un foreach qui est comme ceci :
<?php
foreach ($json['members'] as $member)
{
$nom = $member['character']['name'];
echo $nom;
}
?>
Au dessus de mon foreach : (La varaible $nbmembers affiche le nombre de membres)
<?php
$entrees_par_page = 10; /* Limite le nombre de membres par page */
$total_pages = ceil($nbmembers/$entrees_par_page); // calcul du nombre de pages nécessaires pour tout afficher (on arrondit à l'entier supérieur)
if(!isset($_GET['pg'])){
$page_courante = 1;
} else {
$page = $_GET['pg'];
if ($page<1) $page_courante=1;
elseif ($page>$total_pages) $page_courante=$total_pages;
else $page_courante=$page;
}
$start = ($page_courante * $entrees_par_page - $entrees_par_page); // $start est la valeur de départ (est fonction de la page courante)
?>
Ma fonction pagination :
<?php
function pagination($total,$courante,$page,$option,$troque) {
/* on définit quelques variables dont on aura besoin */
$prec = $courante - 1; // numéro de la page précédente
$suiv = $courante + 1; // numéro de la page suivante
$avder = $total - 1; // avant dernière page
$adjacentes = 2; // nombre de pages à afficher de chaque côté de la page courante
/*
On commence la pagination que l'on stocke dans la variable à retourner
pagination() pourra ainsi être appelée plusieurs fois, en haut et en bas d'une page par exemple
*/
if($total < 1)
{
$pagination = "<div class=\"pagination\"><span class=\"desactive\">1</span></div>"; // s'il n'ya pas au moins deux pages, on n'affiche rien
}
if($total > 1) // il y a au moins deux pages
{
// on commence par stocker dans $pagination le <div> d'ouverture
$pagination .= "<div class=\"pagination\">\n";
// on affiche d'abord le bouton précédent
if ($courante == 2) // si on est sur la page 2, le bouton précédent renvoit sur la page initiale, il est inutile de mettre ?page=1 sinon on se retrouve avec un duplicate content
$pagination.= "<a href=\"".$page."?page=1".$option."\">« préc</a>";
elseif ($courante > 2) // si la page actuelle est supérieure à 2 le bouton précédent renvoit sur la page dont le numéro est immédiatement inférieur
$pagination.= "<a href=\"".$page."?pg=$prec".$option."\">« préc</a>";
else // sinon on est sur la page 1 : on désactive le bouton précédent. on est nécessairement sur la page 1 car on a fait le traitement des pages dans index.php, pas besoin de mettre elseif ($courante==1)
$pagination.= "<span class=\"desactive\">« préc</span>";
/**
On affiche maintenant les pages. On cherchera à afficher au maximum 11 numéros de page en général, et 12 dans le cas 1 où il n'y a pas de troncature :
- dans un 1er cas, il n'y a pas assez de pages pour "tronquer la pagination" : on affiche toutes les pages
- dans le 2ème cas, il y a trop de pages : la troncature s'effectue selon la page sur laquelle on est positionnée
*/
// CAS 1 : il n'y a pas assez de pages pour tronquer, on les affiche toutes (voir figure 1)
if ($total < $troque + ($adjacentes * 2))
{
// on AJOUTE la page 1. On la traite séparément pour avoir index.php au lieu de index.php?pg=1 et ainsi éviter le duplicate content
//cette ligne équivaut à :
if ($courante == 1)
$pagination.= "<span class=\"courante\">1</span>";
else
$pagination.= "<a href=\"".$page."?page=1".$option."\">1</a>";
//$pagination.= ($courante == 1) ? "<span class=\"courante\">1</span>" : "<a href=\"".$pag."\">1</a>";
// pour les pages restantes on utilise une simple boucle for
for ($compteur_page = 2; $compteur_page <= $total; $compteur_page++)
{
if ($compteur_page == $courante) // on affiche la page courante différemment pour la mettre en évidence
$pagination.= "<span class=\"courante\">$compteur_page</span>";
else
$pagination.= "<a href=\"".$page."?pg=$compteur_page".$option."\">$compteur_page</a>";
}
}
// CAS 2 : on a assez de pages pour tronquer en fonction de la page actuelle
elseif($total > 5 + ($adjacentes * 2))
{
/*
on est placé dans la partie proche des premières pages, on tronque donc la fin de la pagination.
l'affichage sera 9 pages à gauche ... 2 pages à droite (voir figure 2)
*/
if($courante < 1 + ($adjacentes * 2))
{
// on affiche la page 1 comme vu précédemment
$pagination.= ($courante == 1) ? "<span class=\"courante\">1</span>" : "<a href=\"".$page."".$option."\">1</a>";
// puis les huit pages suivantes
for ($compteur_page = 2; $compteur_page < 4 + ($adjacentes * 2); $compteur_page++)
{
if ($compteur_page == $courante)
$pagination.= "<span class=\"courante\">$compteur_page</span>";
else
$pagination.= "<a href=\"".$page."?pg=$compteur_page".$option."\">$compteur_page</a>";
}
// les ... pour marquer la troncature
$pagination.= " ... ";
// et enfin les deux dernières pages
$pagination.= "<a href=\"".$page."?pg=$avder".$option."\">$avder</a>";
$pagination.= "<a href=\"".$page."?pg=$total".$option."\">$total</a>";
}
/*
on est placé dans la partie centrale de notre pagination, on tronque donc le début et la fin de la pagination.
l'affichage sera 2 pages à gauche ... 7 pages au centre ... 2 pages à droite (voir figure 3)
*/
elseif($total - ($adjacentes * 2) > $courante && $courante > ($adjacentes * 2))
{
// on affiche les deux premières pages
$pagination.= "<a href=\"".$page."?page=1".$option."\">1</a>";
$pagination.= "<a href=\"".$page."?pg=2".$option."\">2</a>";
// les ... pour marquer la troncature
$pagination.= " ... ";
// puis sept pages : les trois précédent la page courante, la page courante, puis les trois lui succédant
for ($compteur_page = $courante - $adjacentes; $compteur_page <= $courante + $adjacentes; $compteur_page++)
{
if ($compteur_page == $courante)
$pagination.= "<span class=\"courante\">$compteur_page</span>";
else
$pagination.= "<a href=\"".$page."?pg=$compteur_page".$option."\">$compteur_page</a>";
}
// les ... pour marquer la troncature
$pagination.= " ... ";
// et enfin les deux dernière spages
$pagination.= "<a href=\"".$page."?pg=$avder".$option."\">$avder</a>";
$pagination.= "<a href=\"".$page."?pg=$total".$option."\">$total</a>";
}
/*
sinon on est placé dans la partie de droite, on tronque donc le début de la pagination.
l'affichage sera 2 pages à gauche ... 9 pages à droite (voir figure 4)
*/
else
{
// on affiche les deux premières pages
$pagination.= "<a href=\"".$page."?page=1".$option."\">1</a>";
$pagination.= "<a href=\"".$page."?pg=2".$option."\">2</a>";
// les ... pour marquer la troncature
$pagination.= " ... ";
// et enfin les neuf dernières pages
for ($compteur_page = $total - (2 + ($adjacentes * 2)); $compteur_page <= $total; $compteur_page++)
{
if ($compteur_page == $courante)
$pagination.= "<span class=\"courante\">$compteur_page</span>";
else
$pagination.= "<a href=\"".$page."?pg=$compteur_page".$option."\">$compteur_page</a>";
}
}
}
// pour finir on affiche le bouton suivant
if ($courante < $compteur_page - 1)
$pagination.= "<a href=\"".$page."?pg=$suiv".$option."\">suiv »</a>\n";
else
$pagination.= "<span class=\"desactive\">suiv »</span>\n";
$pagination.= "</div>\n";
}
// et on retourne $pagination au programme appelant la fonction
return ($pagination);
}
?>
Et pour finir je fait appelle a ma fonction qui est :
<?php
echo pagination($total_pages, $page_courante, "members.php", "", 10);
?>
Je ne sait pas comment faire pour l'adapter a mon foreach on ma dit après ceci d'utiliser la classe LimitIterator http://php.net/manual/fr/class.limititerator.php.
Qui aurais une idée, une solution... Je vous remercie d'avance pour vos réponses
Modifié par subzeros (04 Jan 2013 - 21:15)