• User Attivo

    Io uso questa copiata da phpbb e modificata:

    
    //
    // FUNZIONE DI PAGINAZIONE
    // in $url passare l'url con # nella posizione dove va messo il numero di pagina
    // in $add_prevnext_text mettere FALSE (se non si vuole) oppure le due stringhe separate da #
    //
    function    myPagination($url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE)
    {
    if ($add_prevnext_text == TRUE)
        $add_prevnext_text = "Precedente#Successiva";
    
    $total_pages = ceil($num_items/$per_page);
    
    if ($total_pages == 1)
        return '';
    
    $on_page = floor($start_item / $per_page) + 1;
    
    $page_string = '';
    if ($total_pages > 10)
        {
        $init_page_max = ($total_pages > 3) ? 3 : $total_pages;
    
        for ($i = 1; $i < $init_page_max + 1; $i++)
            {
            $page_string .= ($i == $on_page) ? '<b>' . $i . '</b>' : '<a href="' . str_replace("#", ($i - 1), $url) . '">' . $i . '</a>';
            if ($i < $init_page_max)
                $page_string .= ", ";
            }
    
        if ($total_pages > 3)
            {
            if ($on_page > 1 && $on_page < $total_pages)
                {
                $page_string .= ($on_page > 5) ? ' ... ' : ', ';
    
                $init_page_min = ($on_page > 4) ? $on_page : 5;
                $init_page_max = ($on_page < $total_pages - 4) ? $on_page : $total_pages - 4;
    
                for ($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
                    {
                    $page_string .= ($i == $on_page) ? '<b>' . $i . '</b>' : '<a href="' . str_replace("#", ($i - 1), $url) . '">' . $i . '</a>';
                    if ($i < $init_page_max + 1)
                        $page_string .= ', ';
                    }
    
                $page_string .= ($on_page < $total_pages - 4) ? ' ... ' : ', ';
                }
            else
                {
                $page_string .= ' ... ';
                }
    
            for ($i = $total_pages - 2; $i < $total_pages + 1; $i++)
                {
                $page_string .= ($i == $on_page) ? '<b>' . $i . '</b>'  : '<a href="' . str_replace("#", ($i - 1), $url) . '">' . $i . '</a>';
                if( $i <  $total_pages )
                    $page_string .= ", ";
                }
            }
        }
    else
        {
        for($i = 1; $i < $total_pages + 1; $i++)
            {
            $page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . str_replace("#", ($i - 1), $url) . '">' . $i . '</a>';
            if ( $i <  $total_pages )
                $page_string .= ', ';
            }
        }
    
    if ($add_prevnext_text)
        {
        list($sPrec, $sSucc) = explode("#", $add_prevnext_text);
        if ($on_page > 1)
            $page_string = ' <a href="' . str_replace("#", ($on_page - 2), $url) . '">' . $sPrec . '</a>&nbsp;&nbsp;' . $page_string;
    
        if ( $on_page < $total_pages )
            $page_string .= '&nbsp;&nbsp;<a href="' . str_replace("#", $on_page, $url) . '">' . $sSucc . '</a>';
        }
    
    return $page_string;
    }
    
    

  • Bannato Super User

    Grazie mille la implemento subito... spero che sia questo il problem altrimenti sono fregato 😞


  • User Attivo

    Ciao ragazzi,
    ho provato ad implementare questo sistema di paginazione ma ho dei problemi, i conti non tornano! http://www.spaccioworld.com/webcommunity/forum/Politica/REFERENDUM-SULLA-DEVOLUTION/1/0/1149275869.htm a questo link potete notare come c'è il vecchio sistema di paginazione e subito dopo quello nuovo suggerito in questo topic. Ho settato in questo modo la funzione:

    myPagination(LinkPagina, NumeroTotaleDiRecord, NumeroDiRecordPerPagina, RecordDiPartenza, $add_prevnext_text = TRUE)
    ``` tuttavia la paginazione non funge. Il problema che ho individuato è il seguente, spero mi possiate dare una mano nel risolverlo: dunque il record di partenza è lo 0, per cui se voglio 10 record per pagina, a pagina due dovrà cominciare da 10, a pagina tre da 20 e via discorrendo...invece quello che succede nello script è che a pagina due parte da 1, a pagina tre parte da 2...insomma il record di START per la richiesta nel DB è sbagliato. Bisogna correggere la funzione o sono io che la setto male? Grazie mille a tutti

  • User Attivo

    Ok, ho risolto così il problema:
    poiché la funzione passa come con GET il numero della pagina da visualizzare e non il record dal quale iniziare, moltiplico nella richiesta sql il valore START con il numero di visualizzazzioni per pagina, per cui se chiedo la pagina 3 con 10 visualizzazzioni per pagina, nella richiesta sql avverà $_GET['start']10, dunque partirà dal record 30! ecco il codice della richiesta nel punto interessato ```
    $sql = "[...] LIMIT ".$_GET['start']
    $rec_pagina.",$rec_pagina";

    il problema è che adesso la pagina la cambia correttamente ma non mi evidenzia la pagina corrente su cui sono! vi invito a guardare qui, anche cliccando il numero della pagina resta fermo su 1 http://www.spaccioworld.com/webcommunity/forum/Politica/REFERENDUM-SULLA-DEVOLUTION/1/0/1149275869.htm...????

  • User Attivo

    In $start_item passi correttamente il numero del primo record da visualizzare (e non della pagina), quello identifica poi la pagina su cui fa la paginazione.


  • User Attivo

    ok, ma se è così come dici tu perché nei link che genera la funzione lo $start_item invece di essere per ogni numero di pagina "0, 10, 20, 30" mi è "0, 1, 2, 3, ..."??Non capisco....


  • User Attivo

    Perchè così la puoi moltiplicare direttamente tu per il numero di item per pagina e sai il valore.


  • User Attivo

    che stupido, hai ragione tu, io facevo moltiplicare solo nella uqery sql e nella funzione lasciavo la costante 0 ad item_start...grazie mille!


  • Bannato Super User

    Niente da fare anche con la paginazione il tutto resta pesantissimo, voi cosa farestE?
    http://www.spaccioworld.com/webcommunity/forum/Spaccio-Time/tutto-cio-che-ti-passa-per-la-testa/0/1144846651.htm

    Abbiamo solo in questo tread 830 pagine help perfavore ci mette mezze minuto per caricare non e proprio fattibile.


  • Bannato User Attivo

    Non riesco a capire la funzione.
    Che devo dare in $url?


  • Bannato User Attivo

    Per la paginazione "fine" ovver oche mi mostra la pagina una per una ho usato questa splendida funzione:
    http://www.guidoz.it/forum/viewtopic.php?t=451

    Ora però vorre ifare una paginazione grossolana che mi mostri i link alle pagine multiple di per esempio 50 ovvero (50 ,100, 150 e così via).

    Come posso fare con la paginazione dell'esempio di html.it?