- Home
- Categorie
- Coding e Sistemistica
- PHP
- Paginazione con visualizzazione ordinata
-
Paginazione con visualizzazione ordinata
Salve ragazzi, dopo vari sbattimenti e ringraziando il grande Alessandro sono riuscito a dare una logica alla paginazione delle pagine elenco del mio sito, ora vorrei apportare un ulteriore modifica allo script della paginazione mi manca un passaggio e cioè attualmente è visualizzato in questo modo:
**Pagina 1 di 14
Prima « Previous 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Next » Ultima
Totale trovati: 135**
sarebbe opportuno quindi che mi faccia visualizzare 10 numeri alla volta o qualcosa di simile:
Prima « Previous 1 2 3 4 5 6 7 8 9 10 Next » Ultima
Prima « Previous 5 6 7 8 9 10 11 12 13 14 Next » Ultima
Il codice che attualmente utilizzo è il seguente:
[php]<?php
$uri=$_SERVER['REQUEST_URI'];
$paginazione = "<strong>Pagina $current_page di " . " ".$tot_pages . "</strong> <br /><br />";if ($current_page!=1) {
$uri2 = preg_replace("/[0-9]*.html/","1.html",$uri);
$paginazione.="<a href="$uri2" title="Vai alla prima pagina">Prima</a> ";$uri2 = preg_replace("/[0-9]*.html/",max(1,$current_page-1).".html",$uri);
$paginazione.="<a href="$uri2" title="Vai alla pagina precedente">« Previous</a> ";}
else {
//qui puoi mettere i pulsanti "prima" e "next" inattivi oppure non visualizzarli
}for($i = 1; $i <= $tot_pages; $i++)
{
if($i == $current_page)
{
$paginazione .= "<span class="current">".$i . "</span> ";
}
else {
$uri2 = preg_replace("/[0-9]*.html/",$i.".html",$uri);
$paginazione .= "<a href="$uri2" title="Vai alla pagina $i">$i</a> ";}
}if ($current_page!=$tot_pages) {
$uri2 = preg_replace("/[0-9]*.html/",min($tot_pages,$current_page+1).".html",$uri);
$paginazione.="<a href="$uri2" title="Vai alla pagina successiva">Next »</a> ";$uri2 = preg_replace("/[0-9]*.html/",$tot_pages.".html",$uri);
$paginazione.="<a href="$uri2" title="Vai all'ultima pagina">Ultima</a> ";}
else {
//qui puoi mettere i pulsanti "prima" e "next" inattivi oppure non visualizzarli
}
$paginazione.="<br /><br /> <span class="disabled">Totale trovati: $tot_records </span> "
?>[/php]
-
Ciao,
per ottenere il risultato che desideri ti basta odificare il ciclo for che elenca le pagine facendo in modo che:- venga eseguito 10 volte (o meno, se il totale delle pagine è minore)
- inizi a ciclare da un valore opportunamente calcolato in precedenza
Una possibile soluzione che non ti richiede eccessive modifiche al codice, è questa:
[PHP]
//codice da inserire prima del ciclo forif ($tot_pages>10)
{
$start=min(max($current_page-4,1),$tot_pages-9);
}
else $start=1;//ciclo for modificato
for($i = $start; $i <= min($start+9,$tot_pages); $i++)
[/PHP]
Ale
-
Ciao a tutti voi del forum,
Ho un problema simile anche io la paginazione mi funziona perfettamente in tutte le pagine tranne che nella ricerca nel senso che quando vado nella seconda pagina mi perde i dati io sto usando questo codiceinclude 'impaginazione.php'; include 'Connessione.php'; if(isset($_GET['search'])){ $search = $_GET['search']; $Operazione = $_GET['TipoOper']; } else{ $Operazione=''; $search=''; if (isset($_POST['search'])){ $search=$_POST['search'];} $Operazione = $_POST['TipoOper']; } $righe_per_pagina = 20; $url_base = "search.php"; $pagine_vicine = 10; // C A L C O L O D E L N U M E R O D I P A G I N E // ricavo il numero totale di record if($Operazione=='Nominativo'){ $query = "SELECT COUNT(*) FROM versamentidaposte WHERE Nominativo LIKE '%$search%'"; } else if($Operazione=='DataPagamento'){ $query = "SELECT COUNT(*) FROM versamentidaposte WHERE DataPagamento LIKE '%$search%'"; } else if($Operazione=='Tassa'){ $query = "SELECT COUNT(*) FROM versamentidaposte WHERE Tassa LIKE '%$search%'"; } else if($Operazione=='CodiceFiscale'){ $query = "SELECT COUNT(*) FROM versamentidaposte WHERE CodFiscale LIKE '%$search%'"; } $result = mysql_query($query); // record complessivi $tot_righe = mysql_result($result,0); // totale pagine $tot_pagine = ceil($tot_righe / $righe_per_pagina); // P A G I N A C O R R E N T E $pagina_corrente = isset($_GET['pag']) ? (int)$_GET['pag'] : 1; // se la pagina corrente è minore di 1 if($pagina_corrente < 1) { header('location: ' . $url_base); exit(); } // se la pagina corrente è maggiore dell'ultima pagina if($pagina_corrente > $tot_pagine) { header('location: ' . crea_url($url_base, $tot_pagine)); exit(); } // E S T R A Z I O N E D E I R E C O R D // calcolo la prima riga da estrarre con la query $prima_riga = ($pagina_corrente - 1) * $righe_per_pagina; if($Operazione=='Nominativo'){ $query = "SELECT ID, Nominativo, CodFiscale, Tassa, Date(DataPagamento) as DataPagamento FROM versamentidaposte WHERE Nominativo LIKE '%$search%'ORDER By Nominativo,ID LIMIT $prima_riga, $righe_per_pagina"; } //codice per estrapolazione dati // creazione dei link di paginazione if(!empty($_GET['search'])) $link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine); echo "$link_paginazione"?> ```qualcuno sa dirmi cosa sbaglio?:cry: