Guarda che coincidenza, l'ho scritta settimana scorsa

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))
#        {
#            - campi che si vogliono estrarre -
#        }
#
# 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 5;
    
    
/**
    * 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> ";                            
                            }
                        
                    }
                }
            }
            

            }
        }