Ti invio una classe che ho fatto io:
Codice PHP:
###################################################################################
# Classe MakePage
#
# Utilizzo:
# Configurare le proprietà pubbliche all'inizio della classe come da spiegazioni
#
# Cereare l'istanza:
# $paging = new MakePage($_GET['start']);
# $paging->Result();
# A questo punto abbiamo istanziato la classe con $_GET['start'] come costruttore.
# E' fondamentale mantenere questo costruttore in quanto MakePage accorda all'url
# tramite GET il punto di ingresso della paginazione con la variabile start.
# In seguito, il metodo Result, restituisce l'identificativo per il database
# tramite la proprietà res.
#
# while ($row = mysql_fetch_array($paging->res))
# {
# echo $row['titolo'];
# }
#
# A questo punto abbiamo costruito l'elenco limitato ad un numero definito
# di record; ora mettiamo i link "pagina precedente" e "pagina successiva".
# Semplicemente:
# <td>$paging->previous_link()</td><td>$paging->next_link()</td>
# Quello che verrà stampato da questi due metodi, dipende dalla configurazione
# delle proprietà previous_link_string e next_link_string, come spiegato di seguito
# In opzione possiamo anche aggiungere l'indice delle pagine.
# Semplicemente:
# $paging->IndexLinks() da inserire magari tra il previous e il next link.
######################################################################################
/**
* MakePage
*
* @package lib
* @author Tarchini Maurizio
* @copyright 2008
* @access public
*/
class MakePage
{
/**
* step indica il numero di records per pagina
* @var int
*/
var $step = 10;
/**
* db_name, db_host, db_user, db_password
* sono i parametri di configurazione per
* l'accesso al database.
* @var string
*/
var $db_name = "";
var $db_host = "";
var $db_user = "";
var $db_password = "";
/**
* con table si indica la tabella del database nella
* quale vanno cercati i dati; questo parametro é obbligatorio
* @var string
*/
var $table = "table";
/**
* In where vanno indicate le clausule della ricerca. Ad esempio
* $where = "id > 100 AND id < 1000";
* In questo caso verranno estratti i record con id superiore a 100
* ed inferiore a 1000. Questa proprietà non é obbligatoria, se non
* viene utlizzata nessuna clausula, $where = "";
* @var string
*/
var $where = "";
/**
* order fa riferimento alla clausula ORDER BY, va indicato
* rispetto a cosa il risultato della ricerca deve essere
* ordinato. Ad esempio: $order = "data". I risultati verranno
* ordinati per data. Il contenuto di order deve essere un
* campo valido della tabella, in caso contrario si
* produrrà un errore. Order non é obbligatorio, se non
* viene utilizzato: $order = "";
* @var string
*/
var $order = "";
/**
* asc_desc è un complemento di order. Inserire ASC se si desiderano
* i risultati in ordine crescente o DESC se si desiderano i risultati
* in ordine decrescente. Questa clausula non é obbligatoria ed é inutile
* se non si utilizza la proprietà order. Se non utilizzata:
* $asc_desc = "";
* Se utilizzata accetta solo ASC o DESC, qualunque altro inserimento
* produrrà un errore.
* @var string
*/
var $asc_desc = "DESC";
/**
* next_link_string e previous_link_string contengono la stringa che
* verrà utilizzata come link per spostarsi tra le pagine ad esempio:
* $next_link_string = "Successive" oppure ">" oppure se si
* desidera inserire un'immagine:
* $next_link_string = "[img]next.png[/img]";
* Questi parametri sono obbligatori
* @var string
*/
var $next_link_string = "Successiva";
var $previous_link_string = "Precedente";
/**
* Se utilizziamo il metodo IndexLinks é buona cosa limitare
* la lunghezza dell'indice stesso. Infatti, se dovessero
* esserci molte pagine, si rischia di avere un'indice enorme
* che sfora il layout. MakePage cercherà di distribuire
* equamente l'indice delle pagine prima e dopo la pagina
* attuale. Ad esempio se max_index=10:
* Alla prima pagina mostrerà i link delle pagine da 1 a 10,
* ma se si troverà a pagina 8, mostrerà i link delle pagine
* da 3 a 13.
* @var int
*/
var $max_index = 10;
var $page;
var $next_link;
var $previous_link;
var $conn;
var $start;
var $max;
var $res;
var $select;
var $count;
/**
* MakePage::MakePage()
*
* @param mixed $start
* Costruttore della classe
* @return void
*/
function MakePage ($start)
{
if (!isset($start) OR $start < 0)
{
$start = 0;
}
$this->start = $start;
$this->page = basename($_SERVER['PHP_SELF']);
}
/**
* MakePage::DbConnectAndSelect()
*
* @return void
*/
function DbConnectAndSelect ()
{
$this->conn = @mysql_connect($this->db_host,$this->db_user,$this->db_password) or die("Impossibile connettersi a MySql");
@mysql_select_db($this->db_name,$this->conn) or die ("Impossibile selezionare il database $this->db_name");
}
/**
* MakePage::DefineQuerys()
*
* @return void
*/
function DefineQuerys ()
{
if ($this->where != "")
{
$this->where = " WHERE " . $this->where;
}
if ($this->order != "")
{
$this->order = " ORDER BY " . $this->order;
if ($this->asc_desc != "")
{
$this->asc_desc = " " . $this->asc_desc;
}
else
{
$this->asc_desc = " ";
}
}
$this->select = "SELECT * FROM " . $this->table . $this->where . $this->order . $this->asc_desc . " LIMIT " . $this->start . "," . $this->step;
$aa = " WHERE rif='general'";
$this->count = "SELECT COUNT(*) AS tot FROM " . $this->table . $this->where;
}
/**
* MakePage::DefineMax()
*
* @return void
*/
function DefineMax ()
{
$this->DbConnectAndSelect();
$resM = mysql_query($this->count, $this->conn);
$row = mysql_fetch_array($resM);
$this->max = $row['tot'];
mysql_close($this->conn);
}
/**
* MakePage::Result()
*
* @return resource
*/
function Result ()
{
$this->DbConnectAndSelect();
$this->DefineQuerys();
$this->res = mysql_query($this->select, $this->conn);
}
/**
* MakePage::NextLink()
*
* @return string
*/
function NextLink ()
{
$this->DefineMax();
if ($this->start + $this->step < $this->max)
{
$next = $this->start + $this->step;
echo "<a href=\"$this->page?start=$next\">$this->next_link_string</a>";
}
}
/**
* MakePage::PreviousLink()
*
* @return string
*/
function PreviousLink ()
{
if ($this->start > 0)
{
$back = $this->start - $this->step;
echo "<a href=\"$this->page?start=$back\">$this->previous_link_string</a>";
}
}
/**
* MakePage::IndexLinks()
*
* @return string
*/
function IndexLinks ()
{
$this->DefineMax();
$pages = intval(($this->max - 1) / $this->step) + 1;
if ($pages > 1)
{
if ($this->start == 0)
{
$now = 1;
}
if ($this->start > 0)
{
$now = ($this->start / $this->step) + 1;
}
$si = $now - (intval($this->max_index / 2));
$ei = $now + (intval($this->max_index / 2));
if ($si <= 0)
{
$ei = $ei + abs($si);
$si = 0;
for ($i = $si; $i < $pages AND $i < $this->max_index + $si; $i++)
{
$start_page = $i * $this->step;
if ($now == $i + 1)
{
$n = $i + 1;
echo " $n ";
}
else
{
echo "<a href=$this->page?start=$start_page>" . ($i + 1) . "</a> ";
}
}
}
else
{
if ($ei >= $pages)
{
$x = $ei - $pages;
$si = $si - $x;
$ei = $pages;
for ($i = $si; $i < $pages; $i++)
{
$start_page = $i * $this->step;
if ($now == $i + 1)
{
$n = $i + 1;
echo " $n ";
}
else
{
echo "<a href=$this->page?start=$start_page>" . ($i + 1) . "</a> ";
}
}
}
else
{
for ($i = $si - 1; $i <= $ei; $i++)
{
$start_page = $i * $this->step;
if ($now == $i + 1)
{
$n = $i + 1;
echo " $n ";
}
else
{
echo " <a href=$this->page?start=$start_page>" . ($i + 1) . "</a> ";
}
}
}
}
}
}
}