mi son permesso di riutilizzare la funzione di Guidoz per riadattarla a db Postgres
Codice PHP:
<?php
require("paging.php");
// stringa di connessione
$conn_string = "host=indirizzoIP port=5432 dbname=nomedeldatabase user=nomeutente password=pwd";
//connessione a postgres
$conn = pg_connect($conn_string);
//sottomissione della query (come usare pg_query())
$res = paging('SELECT * FROM tabella');
//verifica dei risultati: $res è un array.. l'elemento zero contiene il risultato della query per la pagina corrente...
//mentre l'elemento 1 che useremo dove ci pare (nell'esempio lo usiamo alla fine) contiene il codice del minimenu' da dare semplicemente in output
if (!$res[0]) { echo "non ci sono dati";}
else
{
//sull'elemento zero si opera con un ciclo allo stesso modo in cui si
// farebbe con il risultato di pg_query()
while($dati = pg_fetch_array($res[0]))
{
echo "
".$dati['campo'];
}
}
//stampa del minimenu' di link alle altre pagine
// (poteva essere stampato anche prima del ciclo)
echo "
".$res[1];
?>
file paging.php
Codice PHP:
<?php
function paging($query,$x_pag=10,$num_links=5)
{
//conteggio i record presenti
$righe = pg_num_rows(pg_query($query));
if ($righe == 0){ return false; }
//calcolo il numero di pagine necessarie per visualizzare i dati
$numpages = ceil($righe/$x_pag);
//ottengo il numero di pagina, se manca lo imposto ad 1
$pag = isset($_GET['pag'])? $_GET['pag'] : 1;
//imposto il primo estremo del limit
$da = ($pag-1) * $x_pag;
//appendo il limit alla query originaria
$query .= " OFFSET ".$da." LIMIT ".$x_pag;
//gesisco la propagazione della query string
$querystring = '';
foreach($_GET as $k => $v)
{
if ($k != 'pag')
{
$querystring .= "&".$k."=".$v;
}
}
//inizializzo una stringa vuota in cui appenderò l'output del menu'
$menu = '';
//serie di condizionali in cascata per costruire il menu'
if($numpages <= $num_links)
{
for ($pagina = 1; $pagina <= $numpages; $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>& ";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>& ";
}
}
//se la pag corrente è tra le prime $num_links/2 --> stampo i primi $nun_links link
else if($pag <= ceil($num_links/2))
{
for ($pagina=1; $pagina<=$num_links; $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>& ";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>& ";
}
$menu .= "<a class=\"pag_link\" href=\"?pag={$numpages}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>& ";
}
//se la pag corrente è tra le ultime $num_links/2 --> stampo gli ultimi $nun_links link
else if($pag > ($numpages-ceil($num_links/2)))
{
$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>& ";
for ($pagina=$numpages-$num_links+1; $pagina<=$numpages; $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>& ";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>& ";
}
}
//Altrimenti la pagina corrente è una dell centrali --> stampo i $nun_links/2 link prima ed $nun_links/2 link dopo
else
{
$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>& ";
for ($pagina = $pag-ceil($num_links/2-1); $pagina <= $pag+ceil($num_links/2-1); $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>& ";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>& ";
}
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>& ";
}
//restituisco il risultato della query, e l'output del menu'
return array(pg_query($query),$menu);
}
?>