1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
// Pagination générique d'un listing
function pagine(
&$sql // Elément commun de requête : "FROM..." auquel sera ajouté le "LIMIT..."
,$mpp // Nombre max de lignes par page
,$query // Elément de querystring indiquant le n° de page
,$url // URL de la page
,$long=5 // Nombre max de pages avant et après la page courante
) {
// Pour construire les liens, regarde si $url contient déjà un ?
$t = (strpos($url,"?"))?"&":"?";
// Nombre total d'enregistrements retournés
$res = mysql_query("SELECT count(*) ".$sql);
$nbres = mysql_result($res,0,0);
// Calcul du nombre de pages
$nbpage = ceil($nbres/$mpp);
// La page courante est
$p=@$_GET[$query]; if(!$p) $p=1;
if($p>$nbpage) $p = $nbpage;
// Longueur de la liste de pages
$deb = max(1,$p-$long);
$fin = min($nbpage,$p+$long);
// Construction de la liste de pages
$pagine = "";
if($nbpage>1) {
for($i=$deb;$i<=$fin;$i++) {
// Page courante ?
if($i==$p) $pagine.="<font color=red><strong> ".$i." </strong></font>";
// Page 1 > lien sans query
elseif($i==1) $pagine.="<A href='".$url."'> ".$i." </A>";
// Autre page -> lien avec query
else $pagine.="<A href='".$url.$t.$query."=".$i."'> ".$i." </A>";
}
if($pagine) $pagine = " Page".$pagine;
// Premier, précédent
if($pagine&&($p>1)) {
if($p==2) $pagine ="<A href='".$url."'> << </A>".$pagine;
else $pagine ="<A href='".$url.$t.$query."=".($p-1)."'> << </A>".$pagine;
if($p>2) $pagine ="<A href='".$url."'> |< </A>".$pagine;
}
// Suivant, dernier
if($pagine&&($p<$nbpage)) {
$pagine.="<A href='".$url.$t.$query."=".($p+1)."'> >> </A>";
if($p<$nbpage-1) $pagine.="<A href='".$url.$t.$query."=".($nbpage)."'> >| </A>";
}
// Modification de la requête
$sql .= " LIMIT ".(($p-1)*$mpp).",".$mpp;
}
return $pagine;
}
// Exemple d'appel
$SQL = "FROM matable WHERE champ1='critere' ORDER BY champ2 DESC";
$pagine = pagine($SQL,20,"p","index.php");
$res = mysql_query("SELECT * ".$SQL);
echo "<center><table>"; $i=0;
while($val=mysql_fetch_array($res)) { $i++;
echo "<tr class=ligne".($i%2).">
<td>".$val["champ1"]."</td>
<td>".$val["champ2"]."</td>
</tr>";
}
echo "</table><br />".$pagine."</center><br /><br />";
?> |
Partager