• User Attivo

    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]


  • User Attivo

    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 for

    if ($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


  • User Newbie

    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 codice

    
    include '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: