paginazione dati con numero pagine in menu a tendina o paginazione "compressa"

Ciao

Ho usato molte volte la paginazione dei dati che ricavavo dal DB.

Questa volta però ho il timore che i dati inseriti diventino abbastanza numerosi e le pagine prodotte (in cui vengono visualizzate le righe dei record) diventino tante.

Non volendo sconfinare dal layout della pagina creata (i link alle varie pagine potrebbero far aumentare la larghezza della tabella) pensavo di creare un menu a tendina con la numerazione delle pagine totali.

E' possibile farlo?

In alternativa pensavo di adottare una paginazione diciamo "compressa" se le pagine diventano numerose. In  pratica

aggiungere i puntini dopo un certo numero e poi riprendere dall'ultima. Per capirci andate  nella sezione principale di

Programmazione php di questo forum:

http://www.phpnews.it/forum/programmazione-php/

e vedrete in basso una paginazione del tipo:

[1] 2 3  ... 142 

Come posso ottenere uan cosa del genere?

Grazie

inviato 5 anni fa
frankphp
X 0 X

Io cercherei di essere pratico. Immedesimati nell'utente: secondo te a chi importa di andare alla pagina 125 piuttosto che alla 223?

Metti solo quattro link: prima pagina, pagina precedente, pagina successiva, ultima pagina.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Io cercherei di essere pratico. Immedesimati nell'utente: secondo te a chi importa di andare alla pagina 125 piuttosto che alla 223?

Metti solo quattro link: prima pagina, pagina precedente, pagina successiva, ultima pagina.

andrebbe benissimo credo.

Potresti indicarmi, per cortesia, uno script già pronto? Mi risparmieresti un po' di lavoro visto che mi sono avventurato in un progetto abbastanza complesso( e quello della paginazione è solo un piccolo problema) con il quale sono abbastanza indietro.

Grazie

risposto 5 anni fa
frankphp
X 0 X

Credevo volessi implementare una tua soluzione.

Se invece vuoi usare una libreria, ti consiglio PEAR::Pager

risposto 5 anni fa
Massimiliano Arione
X 0 X

Credevo volessi implementare una tua soluzione.

Se invece vuoi usare una libreria, ti consiglio PEAR::Pager

per il momento ho risolto visualizzando solo i link "indietro" e "avanti".

Ho implementato il mio codice così:

// Creo una variabile dove imposto il numero di record 
// da mostrare in ogni pagina
$x_pag = 2;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag'];

// Controllo se $pag è valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1; 

$query = "SELECT * FROM fornitori ORDER BY denominazione";
$risultato = mysql_query($query); 
$num_righe = mysql_num_rows($risultato);
// Tramite una semplice operazione matematica definisco
// il numero totale di pagine
$all_pages = ceil($num_righe / $x_pag);
// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;
 ?>   
  <div id ="mezzo2">
<table align="center"  width="85%" height="400"  id="table5">
  <tr>
  <td id="row5" valign="top">
  
  <table border="1" width="100%" height="30" id="table55">
   <tr>
      <td height="30" width="5%" align="center" id="row6">ID</td>
      <td height="30" width="23%" align="center" id="row6">DENOMINAZIONE</td>
      <td height="30" width="28%" align="center" id="row6">INDIRIZZO</td>
      <td height="30" width="19%" align="center" id="row6">CITTA'</td>
      <td height="30" width="11%" align="center" id="row6">P.IVA</td>
      <td height="30" width="14%" align="center" id="row6">AZIONE</td>
   </tr>
<?
// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$query = "SELECT * FROM fornitori  ORDER BY denominazione LIMIT $first, $x_pag";
$risultato = mysql_query($query); 



$i = 0;
while ($record = mysql_fetch_array($risultato)) {
$id = $record["id"];
$den =   $record["denominazione"];
$indirizzo =  $record["indirizzo"];
$citta = $record["citta"];
$iva = $record["iva"];

 $i = (++$i % 2);

   echo "<tr class=alternate".$i.">
       <td height=\"30\" width=\"5%\" align=\"center\" id=\"row7\">$id</td>
      <td height=\"30\" width=\"23%\" align=\"center\" id=\"row7\">$den</td>
      <td height=\"30\" width=\"28%\" align=\"center\" id=\"row7\">$indirizzo</td>
      <td height=\"30\" width=\"19%\" align=\"center\" id=\"row7\">$citta</td>
      <td height=\"30\" width=\"11%\" align=\"center\" id=\"row7\">$iva</td>
      <td height=\"30\" width=\"14%\" align=\"center\" id=\"row7\">...</td>
   
   
   </tr>";
   
   }
   ?>
<tr><td height="30" colspan="6" align="center" id="row8">
<?
// Se le pagine totali sono più di 1...
// stampo i link per andare avanti e indietro tra le diverse pagine!
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">Pagina Indietro</a>";
    echo"&nbsp;&nbsp;&nbsp;";
  } 
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag + 1) . "\">Pagina Avanti</a>";
   
  } 
}

Ho trovato in giro però delle funzioni interessanti come quelle in questa pagina :

http://www.manuali.it/forum/informatica-ed-internet-programmazione-web/paginazione-dati-con-php-t19351.html

Mi interesserebbe integrare la funzione "function paginazione4",proposta in un post della stessa pagina,

con il mio codice sopra (ovviamente sostituendo il vecchio metodo che ho impiegato), ma non ho capito come utilizzare quella funzione con il codice che si occupa di richiamare i dati dal DB.

Potresti darmi una mano?

Grazie

risposto 5 anni fa
frankphp
X 0 X

L'aiuto che posso darti è un consiglio: lascia perdere questo codice improvvisato, se lo guardi bene puoi capire anche da solo che è scritto coi piedi (per avere il numero totale di righe seleziona TUTTE LE RIGHE DEL DB e poi le conta!)

Fai un piccolo sforzo, installa il pacchetto Pager di PEAR e leggi la documentazione, che tra l'altro è chiara ed esauriente.

Vedrai che ti darà molte soddisfazioni.

Tra l'altro il pacchetto contiene, in examples/Pager_Wrapper.php, delle funzioni da usare per interagire con il database.

risposto 5 anni fa
Massimiliano Arione
X 0 X

L'aiuto che posso darti è un consiglio: lascia perdere questo codice improvvisato, se lo guardi bene puoi capire anche da solo che è scritto coi piedi (per avere il numero totale di righe seleziona TUTTE LE RIGHE DEL DB e poi le conta!)

Fai un piccolo sforzo, installa il pacchetto Pager di PEAR e leggi la documentazione, che tra l'altro è chiara ed esauriente.

Vedrai che ti darà molte soddisfazioni.

Tra l'altro il pacchetto contiene, in examples/Pager_Wrapper.php, delle funzioni da usare per interagire con il database.

Ok. Appena ho un po' di tempo me lo studio e magari mi faccio risentire se trovo delle difficoltà. Ok?

Grazie

risposto 5 anni fa
frankphp
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda