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'])) ? 1 : (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($articles, SORT_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