- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Risolto] paginazione php
-
[Risolto] paginazione php
Ciao a tutti,
ho trovato questo codice per fare la paginazione su internet.
A me serve che, anche se le pagine sono 200, me ne visualizzi 10 per volta. Il codice dovrebbe fare questo ma non va e non capisco dov'è l'errore.
In pratica quando clicco sulle pagine (es 10), mi fa vedere quelle dopo ma restano anche quelle prima.
Qualcuno sa aiutarmi?
Grazie mille![PHP]function pagination_4($total_pages,$page){
global $webpage; $pagination=""; if($total_pages!=1){ /*Impostiamo il numero massimo di elementi visualizzabili all'apertura della patina, in questo caso 10;*/ $max = 10; //Usiamo questa variabile nel cilco for piu sotto; $max_links = $max+1; $h=1; //Se la pagina è > di $max_links if($page>$max_links){ //Facciamo partire il nostro loop $h=(($h+$page)-$max_links); } //Se la pagina non è l'unica if($page>=1){ //estendiamo il nosto range di link visualizzabili $max_links = $max_links+($page-1); } //Se il numero massimo di link visualizzabili, supera il numero totale delle pagine, allora il numero di links è =numero totale di pagine if($max_links>$total_pages){ $max_links=$total_pages+1; } //Creiamo i link prima e prev if($page>1){ $pagination.="<a href=".$webpage."?page=1><small>prima</small></a> <a href=".$webpage."?page=".($page-1).">Prev</a>"; } //Creiamo le pagine linkate for ($i=$h;$i<$max_links;$i++){ if($i==$page){ $pagination.="<a>".$i."</a>"; } else{ $pagination.="<a href=".$webpage."?page=".$i.">".$i."</a>"; } } //Creiamo i link Next last buttons if(($page >="1")&&($page!=$total_pages)){ $pagination.="<a href=".$webpage."?page=".($page+1).">Next</a> <a href=".$webpage."?page=".$total_pages."><small>Last</small></a>"; } } //if one page of results else{ $pagination.=""; } return($pagination);
}
echo pagination_4($total_pages,$page);
[/PHP]
-
Ciao liamuscogiuri,
non si capisce molto bene la tua condizione, comunque quella funzione non fa altro che generarti i link, per quanto riguarda il fatto che prende più record del dovuto, suppongo che tu utilizzi un database quindi dovresti modificare la query che non ci hai però postato.
-
La query è questa:
[PHP]
$query = "SELECT * FROM ".$tipo." WHERE Titolo like '".$_GET['lettera']."%' AND P_Lingua='".$_SESSION[lang]."' ORDER BY Titolo ASC";
[/PHP]Ma il problema non è nella query bensì nella paginazione.
Funziona tutto, vorrei solamente che mi visualizzasse massimo 10 pagine per volta, e quindi quando stampo la paginazione, dovrei vedere:<Prev 1 2 3 4 5 6 7 8 9 10 Next>
Nel caso in cui mi trovo sulla pagina 12 mi dovrebbe vedere
<Prev 3 4 5 6 7 8 9 10 11 12 13 14 Next>Mentre invece mi visualizza le pagine successive, ma parte sempre da 1, così:
<Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Next>Io invece vorrei che vedesse massimo 10 link per volta.
Ho più o meno capito che è la variabile $h a decidere da dove partire, nel ciclo for, ma non riesco a farlo funzionare come vorrei...
-
Ah ora ho capito.
Visto che il codice non mi sembrava il massimo l'ho riscritto, prova cosi:
[php]
<?php
function pagination_4($total_pages,$page)
{global $webpage; $pagination=""; if($total_pages >= 1) { /*Impostiamo il numero massimo di elementi visualizzabili all'apertura della patina, in questo caso 10;*/ $max = 10; $start = $page-$max; if($start < 1) $start = 1; $end = $start+$max*2; if($end > $total_pages) $end = $total_pages; // Creiamo i link prima e prev if($page>1) $pagination.="<a href=".$webpage."?page=1><small>prima</small></a> <a href=".$webpage."?page=".($page-1).">Prev</a> "; // Creiamo le pagine linkate for ($i=$start;$i<=$end;$i++) if($i==$page) $pagination.="<a>".$i."</a> "; else $pagination.="<a href=".$webpage."?page=".$i.">".$i."</a> "; // Creiamo i link Next last buttons if($page >= 1 && $page != $total_pages) $pagination.="<a href=".$webpage."?page=".($page+1).">Next</a> <a href=".$webpage."?page=".$total_pages."><small>Last</small></a>"; } // if one page of results else $pagination.=""; return $pagination;
}
echo pagination_4($total_pages,$page);
[/php]
-
Wow, funziona!!!
E' proprio quello di cui avevo bisogno, grazie mille per la velocità e la pazienza!
-
Figurati.