Newsgroup: it.comp.www.php
Titolo: algoritmo -> navigatore

salve sto cercando di implementare un algoritmo
con questo criterio...
ho da 1..100 pagina ora vorrei che l'utente alla pagina uno veda
[...] 1,2,3,4,5,6, maxperpag [...]
come preme i puntini di sospensione deve andare alla succ. maxperpag  pagine
ma se preme una della pagina che stanno tra [...] 1,2,3,4,5,6, devi si 
visualizzare la pagina
ma deve restare fra gli stessi range da [...] ...a[...]
spero di essermi spiegato
avete qualche consiglio da darmi ? 

yag wrote:

non e' meglio?..
1 <2> 3 4 5 6 7 [..]
[..] 7 8 9 10 11 <12> 13 14 15 16 17 [..]
cioe' N pag precedenti ed N pag successive 
i puntini destri punteranno ad 
$id_destra = (($id_corrente + 10) > $id_massimo) ? $id_massimo :
$id_corrente + 10;
quelli sinistri
$id_sinistra = (($id_corrente - 10) > 0) ? $id_corrente - 10 : 1;
-- 
www.iuz-lab.info

"iuz" <us...@host.network> ha scritto nel messaggio 
news:FLs5e.1196041$35.44...@news4.tin.it...

sarebbe megio anche perch+ čpiů facile... infatti con l'altro mi sto 
incasinando...
ma lo vuole cosě.... (Il mio grafico )
---

 ---
allora dovresti risolvere con una divisione..
[non testato e senza controlli su valori id incoerenti]
$idCorrente = $_GET...
$idInizio = intval($idCorrente / $maxPerPage) * $maxPerPage;
$idFine = $idInizio + $maxPerPage;
echo "LINK " . $idInizio - $maxPerPage . "[..]\n";
for(; $idInizio < $idFine; $idInizio++){
  if($idInizio == $idCorrente) echo '*';
  echo "LINK $idInizio\n";
}
echo "LINK " . $idFine + $maxPerPage . "[..]\n";
-- 
www.iuz-lab.info

 ---
allora dovresti risolvere con una divisione..
[non testato e senza controlli su valori id incoerenti]
$idCorrente = $_GET...
$idInizio = intval($idCorrente / $maxPerPage);


 ---
allora dovresti risolvere con una divisione..
[non testato e senza controlli su valori id incoerenti]
$idCorrente = $_GET...
$idInizio = intval($idCorrente / $maxPerPage) * $maxPerPage;
$idFine = $idInizio + $maxPerPage;
echo "LINK " . $idCorrente - $maxPerPage . "[..]\n";
for(; $idInizio < $idFine; $idInizio++){
  if($idInizio == $idCorrente) echo '*';
  echo "LINK $idInizio\n";
}
echo "LINK " . $idCorrente + $maxPerPage . "[..]\n";
-- 
www.iuz-lab.info

avevo 10 minuti buchi e l'ho scritto un po meglio:
non so come fai la presentazione ma non imp.
<?php
$num_pagine   = 10000;
$max_per_page = 20;
$id_pagina    = $_GET["pagina"];
$screen       = floor($id_pagina/$max_per_page);
$start        = $screen * $max_per_page + 1;
$output       = "[...] ";
for($i=$start,$end=$start+$max_per_page;$i<$end;$i++)   
        $output .= ($i == $id_pagina ? "*".$i."*" : $i)." ";
echo $output." [...]";
?>

> $idInizio = intval($idCorrente / $maxPerPage) * $maxPerPage;
c'e' un errore non e $maxPerPage ma $maxNumPage.
comunque l'ho riscritto.

Luciano Tolomei wrote:

non ti sbagliare..
non era l'effetto che lui desiderava (a meno ce io non abbia frainteso)..
ho controllato il mio codice e funziona ammessa la nota [non testato e senza
controlli su valori id incoerenti]..
il tuo codice invece non sembra funzionare correttamente..
prima riga tuo codice..  [num e' il mio _GET](?num=60&pagina=60)
[...] 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [...]
50[..] *60 61 62 63 64 65 66 67 68 69 70[..]
non crei nemmeno nessun link per i puntini..
quando yag rispondera' forse avro' chiarimenti..
[test_code.php]
<?php
$num_pagine = 10000;
$max_per_page = 20;
$id_pagina = $_GET["pagina"];
$screen = floor($id_pagina/$max_per_page);
$start = $screen * $max_per_page + 1;
$output = "[...] ";
for($i=$start,$end=$start+$max_per_page;$i<$end;$i++)
$output .= ($i == $id_pagina ? "*".$i."*" : $i)." ";
echo $output." [...]";
echo "<br />";
$idCorrente = $_GET['num'];
$maxPerPage = 10;
$idInizio = intval($idCorrente / $maxPerPage) * $maxPerPage;
$idFine = $idInizio + $maxPerPage;
echo " " . $idCorrente - $maxPerPage . "[..]\n";
for(; $idInizio < $idFine; $idInizio++){
 if($idInizio == $idCorrente) echo '*';
  echo "$idInizio \n";
}
echo " " . $idCorrente + $maxPerPage . "[..]\n";
?> 
[/test_code.php]
-- 
www.iuz-lab.info

 50[..] *60 61 62 63 64 65 66 67 68 69 70[..]
il tuo script non tiene conto di quante pagine ci sono !?!
e non credo che siano infinite.

 e non credo che siano infinite.
[mi quoto]
[non testato e senza controlli su valori id incoerenti]
[/mi quoto]
ho dovuto abbandonare il test sugli id incoerenti poiche' se il numero
massimo e' variabile devo ottenerlo al momento..
per il minimo basta una if (deve solamente essere maggiore di 0)..
per il massimo devo ottenere il massimo corrente ed effettuare una if (non
deve superare il massimo)..
-- 
www.iuz-lab.info

 e non credo che siano infinite.
LOL nemmeno il mio ...
e' meglio se vado a far due passi... ci risentiamo da lunedi.
correggo:
<?php
$num_pagine   = 10000;
$max_per_page = 20;
$max_screens  = $num_pagine / $max_per_page -1;
if      (!isset($_GET["pagina"]))       $id_pagina = 1;
else if ($_GET["pagina"] > $num_pagine) $id_pagina = $num_pagine;
else                                    $id_pagina = $_GET["pagina"];
$screen       = floor(($id_pagina-1)/$max_per_page);
$start = $screen * $max_per_page+1;
$output = ($start == 1 ? "" : "[...] ");
for($i=$start,$end=$start+$max_per_page;$i<$end;$i++)
        $output .= ($i == $id_pagina ? "*".$i."*" : $i)." ";
$output .= ($screen == $max_screens ? "" : "[...]");    
echo $output;
?>

"iuz" <us...@host.network> ha scritto nel messaggio 
news:Epy5e.1198626$35.44...@news4.tin.it...

purtroppo non avuto tempo di testare i vostri codice (cmq grazie) adesso lo 
farò ,
il nocciolo del problema secondo me sta nel trovare il primo id  della x 
page
mi spiego
intanto le pagine sono infinite immagina di usarlo per un blog
possono essere da 10 a 1000 cmq....
io facevo così:
ho  la pagina corrente , ho il numero massimo di pagine attuale
numerogruppipagine = id_corrente/ nidperpage;
ora dovrei trovare il primo numero di numerogruppipagine ed il gioco è fatto 
perchè ipotizando di chiamare questo numero
primonumerodipagina faccio
for ($i=primonumerodipagina  $<=$primonumerodipagina +$nidperpage)
...
non ho fatto il controllo dei limiti cmq giusto per rendere l'idea...
---

yag wrote:

beh visto che i range non devono cambiare se non quando si raggiunge un dato
valore io avevo risolto come potrai vedere da quello che ho scritto prima..
comunque se il valore massimo e' infinito prova questo codice
<?php
$idCorrente = isset($_GET['page']) ? intval($_GET['page']) : 0;
$maxPerPage = 10;
$idInizio = intval($idCorrente / $maxPerPage) * $maxPerPage;
$idFine = $idInizio + $maxPerPage;
if(($idCorrente - $maxPerPage) > 0)
  echo "<a href='{$_SERVER['PHP_SELF']}?page=" . ($idCorrente -
$maxPerPage) . "'>[..]</a>\n";
for(; $idInizio < $idFine; $idInizio++){
  $link = ($idInizio != $idCorrente) ? $idInizio : $link =
"<b>$idInizio</b>";
  echo "<a href='{$_SERVER['PHP_SELF']}?page=$idInizio'>$link</a> \n";
}
echo "<a href='{$_SERVER['PHP_SELF']}?page=" . ($idCorrente + $maxPerPage) .
"'>[..]</a>\n";
?>
-- 
www.iuz-lab.info