• User Attivo

    [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]


  • ModSenior

    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.


  • User Attivo

    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...


  • ModSenior

    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]


  • User Attivo

    Wow, funziona!!!
    E' proprio quello di cui avevo bisogno, grazie mille per la velocità e la pazienza!


  • ModSenior

    Figurati.
    :ciauz: