Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478

    [PHP] Paginazione dati recuperati da file di testo

    Avrei bisogno di realizzare un sistema per gestire la paginazione di alcuni dati recuperati da un file di testo.

    Diciamo che per una buona metà il codice l'ho già scritto (riadattato da uno script per paginare dati provenienti da un database mysql), mi servirebbe solo poter aggiungere un controllo per gestire il numero in eccesso delle pagine totali.

    Cerco di spiegare la cosa con un esempio: mettiamo che il numero di record da visualizzare per pagina lo imposto a 3, se nel file di testo ho 12 record, automaticamente avrò a disposizione 4 link (3 record per pagina) per spostarmi nelle varie pagine. L'output che attualmente ottengo è simile a questo
    codice:
    Pagine (4) 1 2 3 4
    Il problema è che se le pagine fossero tante, tipo una cinquantina, l'output mostrato prima mi indicherebbe, giustamente, tutti i 50 link consecutivi.

    Ecco, a me servirebbe un modo per evitare questa situazione e ottenere, magari, una cosa simile
    codice:
    Pagine (50) 1 2 3 4 5 » successive 5 pagine...
    (da quando frequento questo splendido forum, ho visto titoli di thread da ergastolo , richieste senza capo né coda, e amenità a non finire... spero di non aver ampliato la fila... )

    Posto il codice che sto utilizzando e che vorrei modificare
    Codice PHP:
    [font=courier new]
    <?php
    // nel file database.txt ho una decina di righe scritte così:
    // 07/06/05|Articolo nr.1|Testo di prova articolo uno...
    // 06/06/05|Articolo nr.2|Testo di prova articolo due...
    // etc...
    $archives 'database.txt';
    $file file($archives);

    if(isset(
    $_GET['id'])) {

    // recupero il numero di riga (con $id) di riferimento
    // nel file database.txt e stampo a video il contenuto...

    } else {

    // estraggo i record dal file di testo mostrando solo il "titolo"
    foreach($file as $k => $v) {
    $rows explode('|'$v);
    $articles[] = "- <a href=\"?id=$k\">$rows[1]</a>
    \n"
    ;
    }

    $num_row count($file); // numero totale di record
    $break 3// record per pagina
    $tot_pag ceil($num_row $break); // pagine totali
    $cur_pag = (empty($_GET['n'])) ? : (int)$_GET['n']; // pag corrente
    $first = ($cur_pag 1) * $break// pagina iniziale
    $break += $first// limite ed incremento record successivi

    // ordino i record in maniera decrescente
    rsort($articlesSORT_NUMERIC);
    reset($articles);

      
    // stampo i record
      
    for($n $first$n $break$n++) {
        echo @
    $articles[$n];
      }

    // visualizzo e creo i link per le pagine totali 
    $sys_pag "Pagine totali: ($tot_pag): ";
    for(
    $i 1$i <= $tot_pag$i++) {
      if(
    $i == $cur_pag$sys_pag .= "[b]$i[/b] ";
      else 
    $sys_pag .= "<a href=\"?n=$i\">$i</a> ";
    }
    echo 
    "
    $sys_pag";
    }
    ?>[/font]
    Ok, se siete arrivati fino in fondo siete già da premiare ...l'ultima parte del codice ($sys_pag) vorrei modificarla in maniera tale da non ottenere l'output di tutti i link consecutivi per quante pagine ci sono.

    Confido in voi! Grazie

  2. #2
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    ...qualche idea?





    Ho provato e riprovato, ma non riesco a venirne a capo...

  3. #3
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Ok, mi viene da pensare che sia una cosa troppo complicata da spiegare...




    ...desisto.

  4. #4
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Se può essere utile a qualche altro utonto... un caro amico (Gianni) mi ha dato una buona soluzione...
    codice:
    // visualizzo e creo i link per le pagine totali
    // ------------------------------------------------
    // decide l'ampiezza dell'intervallo delle pagine da mostrare
    $delta = 1;
    // prima pagina dell'intervallo
    $inizio = $cur_pag - $delta;
    // ultima pagina dell'intervallo
    $fine = $cur_pag + $delta;
    // la prima pagina non può essere inferiore a 1
    if($inizio < 1) $inizio = 1;
    // l'ultima pagina non può essere maggiore delle pagine totali
    if($fine >= $tot_pag) $fine = $tot_pag;
    $sys_pag = null;
    // costruisco l'intervallo delle pagine
    for($i = $inizio; $i <= $fine; $i++) {
    if($i == $cur_pag) $sys_pag .= "$i \n";
    else $sys_pag .= "<a href=\"?n=$i\">$i</a> \n";
    }
    
    // se la prima pagina dell'intervallo non è la 1 allora metto "Precedente"
    if($inizio > 1) $sys_pag = 'Precedente \n" . $sys_pag;
    // se l'ultima pagina dell'intervallo non è l'ultima vera metto "Successivo"
    if($fine < $tot_pag) $sys_pag .= 'Successivo \n";
    // le pagine totali
    $sys_pag = "Pagine totali: ($tot_pag): \n" . $sys_pag;
    echo "
    $sys_pag</br>";
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.