Ho creato questa classe che gestisce in modo COMPLETO la paginazione, con record successivo, precedente ultimo primo e numeri di pagina. inoltre recupera le variabili GET della vostra pagina, dovete solo coopiarla in qualsiasi punto della pagina o include e
per utilizzarla dovete mettere in prossimità del vostro ciclo WHILE IL SEGUENTE CODICE (in grassetto):
$pageObj=new makePage;
$pageObj->setVars(mysql_num_rows($query),10);
while ($rigo=mysql_fetch_array($query)){
if ($pageObj->init < $pageObj->limit && $pageObj->recCount >= $pageObj->init){
// QUI SCRIVETE LA VOSTRA PAGINA
$pageObj->init++;
}
$pageObj->recCount++;
}
// menù navigazione
$pageObj->showNavigator();
mysql_free_result($query);
Codice PHP:
class makePage{
// setta le variabili necessarie a gestire la
// paginazione, come argomenti vuole il numero
// di record totali e i record per pagina (arbitrario)
function setVars($num,$perPage){
// ultimo record da visualizzare
$limit=$perPage;
// pagine totali
$totPages=ceil($num/$perPage);
// pagina corrente effettiva
$currentPage=1;
// pagina richiesta
$page=1;
// detrmina da che punto in poi del ciclo
// devono essere visulizzati i record
$init = 0;
if(isset($_GET['page']) && $_GET['page']!="" ){
$page = $_GET['page'];
}
$recCount = 0;
$currentPage=$page;
$nextPage=$page+1;
$previousPage=$page-1;
$firstPage=1;
$lastPage=$totPages;
// se è stata scelta una pagina
// particolare il limite corrisponde
// alla pagina moltiplicata per i record per pagina
$limit=$page*$perPage;
// l'inizio invece corrisponde al
// limite meno i record per pagina
$init = ($limit-$perPage);
// setto le proprietà della pagina
$this->page=$page;
$this->recCount = 0;
$this->currentPage=$page;
$this->nextPage=$page+1;
$this->previousPage=$page-1;
$this->firstPage=1;
$this->lastPage=$totPages;
$this->limit=$limit;
$this->init=$init;
}
function getOthers(){
// funzione che preleva le altre variabili http
// con i rispettivi valori per aggiungerli al link
// della barra di navigazione in luogo di $params
$params = "";
foreach ($_GET as $value) {
if ((key($_GET))!="page"){ // prelevo le altre variabili http ECCETTO page
$params.=(key($_GET))."=".$value."&";
next($_GET);
}
}
$this->params = $params;
}
// mostra la barra di navigazione tra i record
function showNavigator(){
// mi assicuro che i record trovati siano != 0 e la
// pagina non sia 1
if ($this->lastPage!=0 && $this->lastPage!=1){
$this->getOthers();
// costruisco la barra di navigazione
echo "
<table width='100%' cellspacing='5'>
<tr>
<td align='center' width='20%'>";
if ($this->page!=1){
echo "[url='?".$this->params."page=".$this->firstPage."']<<[/url]";
}
echo "</td><td align='center' width='20%'>";
if ($this->page!=1){
echo "[url='?".$this->params."page=".$this->previousPage."']<[/url]";
}
echo "</td><td align='center' width='20%'>";
// gestione numeri di pagina
$pageInterval=10; // corrisponde all'intervallo di pagine visualizzato
$from = ((ceil($this->currentPage/10)-1)*10)+1;
$to = $from + $pageInterval;
for ($numPage=$from;$numPage<=$to;$numPage++){
if ($numPage<=$this->lastPage){
echo "
<a href='?".$this->params."page=".$numPage."'>";
if ($this->currentPage==$numPage){
// se la pagina corrente è uguale a $numPage la visualizzo in grassetto
echo "[b]$numPage[/b]</a>";
}
else {
echo "$numPage</a>";
}
}
}
// fine gestione numeri di pagina
echo "</td><td align='center' width='20%'>";
if ($this->lastPage!=$this->currentPage){
echo "[url='?".$this->params."page=".$this->nextPage."']>[/url]";
}
echo "</td><td align='center' width='20%'>";
if ($this->lastPage!=$this->currentPage){
echo "[url='?".$this->params."page=".$this->lastPage."']>>[/url]";
}
echo "</td>
</tr>
<tr>
<td align='center' colspan='5'>";
echo "Pagina [b]".$this->currentPage."[/b] di [b]".$this->lastPage."[/b]
</td>
</tr>
</table>
</p>
";
}
}
}