ciao a tutti, ho creato un oggetto che permette di fare la paginazione dei dati senza limit e con 1 sola query, spiego brevemente:
Oggetto(da includere nel file utilities.php o qualcosa del genere):
Codice PHP:
class makePage{
// setta le variabili necessarie a gestire
// la paginazione, come argomenti vuole il
// nomemodulo o file in questione,
// il numero di record totali e i record per pagina
function setVars($param1,$num,$perPage){
// $perPage=10;
$limit=$perPage; // ultimo record da visualizzare
$totPages=ceil($num/$perPage); // pagine totali
$currentPage=1; // pagina corrente, variabile d'ambiente
$page=1; // pagina corrente, variabile parametrica
$init = 0; // detrmina la visualizzazione dei record
if(isset($_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);
// parametro opzionale, in questo caso lo utilizzo
// per richiamare il giusto file del modulo
$this->param1=$param1;
// setto le proprietà dell'oggetto
$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;
}
// mostra la barra di navigazione tra i record
function showNavigator(){ // NB: file potrebbe essere cambiato con qualsiasi altro parametro (ad esempio IDQualcosa), corrisponde a param1 passato tramite il metodo setVars
echo "<table width='100%'>
<tr>
<td align='center'>";
if ($this->page!=1){
echo "[url='?file=".$this->param1."&page=".$this->firstPage."']<<[/url]";
}
echo "</td><td align='center'>";
if ($this->page!=1){
echo "[url='?file=".$this->param1."&page=".$this->previousPage."']<[/url]</td>";
}
echo "</td><td align='center'>";
if ($this->lastPage!=$this->currentPage){
echo "[url='?file=".$this->param1."&page=".$this->nextPage."']>[/url]</td>";
}
echo "</td><td align='center'>";
if ($this->lastPage!=$this->currentPage){
echo "[url='?file=".$this->param1."&page=".$this->lastPage."']>>[/url]</td>";
}
echo "</td>";
echo " <tr>
</table>
";
}
}
nella pagina il ciclo sui record deve essere necessariamente fatto in questo modo (i cambiamenti sono minimi)
Codice PHP:
// istanzio l'oggetto per la paginazione
$pageObj=new makePage;
$pageObj->setVars("param1",mysql_num_rows($query),10);
while ($rigo=mysql_fetch_array($query)){
if ($pageObj->init < $pageObj->limit && $pageObj->recCount >= $pageObj->init){ // PAGINAZIONE
// VOSTRO OUTPUT DEI DATI
$pageObj->init++; // PAGINAZIONE
}
$pageObj->recCount++; // PAGINAZIONE
}
// richiamare il metodo showNavigator per
// per visualizzare menù navigazione
$pageObj->showNavigator();
opinioni, suggerimenti, commenti, domande? :gren: