Olen saanut tehtyä tavallisen sivutuksen, joka näyttää kaikki sivunumerot. Ajattelin kuitenkin, että jos sivuja tulee todella paljon, olisi ne järkevämpää pistää muotoon:
[Ensimmäinen] [<] ... 3 4 5 6 7 8... [>] [Viimeinen]
tai jtn muuta vastaavaa. Olen nyt tässä pähkäillyt monta tuntia, miten homman saisi yksinkertaisimmin tehtyä. Oletteko te tehneet tällaista systeemiä tai onko teillä ideoita?
Olen tehnyt tuollaisen, eikä siinä ollut mitään ongelmaa.
Mikä tuossa nyt tuottaa tuskaa?
Tuohon on vaikka kuinka monta eri vaihtoehtoa, mutta esim. näin:
<?php $sivumaara = 100; $nykyinen = 5; // nykyinen sivu for($sivu=$nykyinen;$sivu<=$nykyinen+5;$sivu++) { if($sivu > $sivumaara) { break; } echo $sivu; } ?>
Tuo siis näyttää nykyisen ja seuraavat 5 sivua. Parempi olisi kyllä tehdä sillain että näkyy niitä sivuja vaikka 3 ennen ja jälkeen nykyisen sivun, mutta tee miten teet. Tämä on sen verta yksinkertaista koodia että jos olet sivutuksen saanut toimimaan niin ei tämänkään pitäisi tuottaa ongelmia.
Juu, tuo nyt ei ole ongelma eikä mikään, mutta entäs sitten kun halutaan näyttää myös esim. 3 ensimmäistä ja 3 viimeistä sen mukaan missä mennään? Eli jos sivuja on 15 ja ollaan sivulla 7, näkyy:
1 2 3 ... 5 6 7 8 9 ... 13 14 15
Ja sivulla 4:
1 2 3 4 5 6 ... 13 14 15
15:
1 2 3 ... 13 14 15
jne...
Nettutsissa oli hyvä artikkeli/opas juuri sivujen numeroinnista. Kannattaa tsekata, jos siitä olisi apua.
Pitää näköjään tutustua olio-ohjelmointiin, koska tuossa oppaassa homma tehdään olioilla. Kiitoksia vinkistä!
Enpä oikein tiedä kannattaako olio-ohjelmointia sekoittaa näin simppeliin juttuun.
Tässä raakile, jonka väänsin parissa minuutissa:
<?php define('MID_OFFSET',2); define('EDGE_OFFSET',3); $current = $_GET['n']; $max_pages = 36; if($current!=1) echo "<a href=\"?n=".($current-1)."\">[<]</a> "; $echo_dots = false; for($i=1;$i<=$max_pages;$i++) { if($i==$current) echo "$i "; else if($i<=EDGE_OFFSET||$i>$max_pages-EDGE_OFFSET) echo "<a href=\"?n=$i\">$i</a> "; else if(abs($current-$i)<=MID_OFFSET) { echo "<a href=\"?n=$i\">$i</a> "; $echo_dots = false; } else if(!$echo_dots) { echo " ... "; $echo_dots = true; } } if($current!=$max_pages) echo "<a href=\"?n=".($current+1)."\">[>]</a>"; ?>
Etköhän saa tuosta puukotettua itsellesi sopivan.
Paitsi, että se olioversio on tuota sotkuista versiota huomattavasti dynaamisempi. Olkoonkin, että nettutsin versio on PHP4:lle ja kieltämättä aivan yhtä sotkuisa. Valmiita löytyy myös muita, esim. PEAR - Pager.
katsoitteko tuota Antin vinkkiä.
https://www.ohjelmointiputka.net/koodivinkit/
Aihe on jo aika vanha, joten et voi enää vastata siihen.