Omdat ik nu toevallig een navigatiescriptje nodig had, en de structuur van de SiteMasters-navigatie enorm handig is, heb ik even een functie gemaakt die handige waardes output, zodat je simpel en eenvoudig een query kunt opbouwen.
Even een klein voorbeeld en woordje uitleg i.v.m. het gebruik:
<?php
include 'bestandmetdiefunctie.php';
// Ik veronderstel dat dit wel duidelijk is ;-)
$aantal_items = mysql_result(mysql_query("SELECT COUNT(id) FROM tabel WHERE iets = 'ietsanders'"),0);
// Hiermee haal je het aantal beschikbare items op, lijkt me ook duidelijk
$navigatie = navigatie(30,$aantal_items,$_GET['nav'],'?pagina=forum&cat=php&topic=4&nav=[--nav--]');
// Je ziet dat de laatste paramater [--nav--] bevat. Hier komt het nummer van de pagina waar je uitkomt bij het aanklikken van dropdowns / knoppen
// Waarom is dit handig? Wel, neem onderstaand voorbeeld:
$navigatie = navigatie(30,$aantal_items,$_GET['nav'],'/forum/topics/4/[--nav--].html');
// Zie je: je kan de navigatie in het midden van je url draaien zonder problemen.
// Als je nu hier een dropdown en knopjes wilt (navigatie dus):
echo $navigatie['navigatie'];
// Als je nu een bijhorende query wilt maken:
$query = mysql_query("SELECT velden FROM tabel WHERE cat = ".$_GET['cat']." LIMIT ".$navigatie['begin'].",".$navigatie['max']) or die(mysql_error());
// De overige outputs "paginas" en "huidig" dienen meer om te debuggen, maar als je dit wilt meedelen aan de gebruiker kan dit ook, met
echo $navigatie['paginas'];
echo $navigatie['huidig'];
?>
<?php
include'bestandmetdiefunctie.php';
// Ik veronderstel dat dit wel duidelijk is ;-)
$aantal_items=mysql_result(mysql_query("SELECT COUNT(id) FROM tabel WHERE iets = 'ietsanders'"),0);
// Hiermee haal je het aantal beschikbare items op, lijkt me ook duidelijk
Update 18/06/06:
Ik heb gezien dat, als je deze dropdown 2 keer op 1 pagina zet, dat dit niet valid is aangezien je dan 2 keer hetzelfde ID hebt bij een element. Dit is nu opgelost, het gebruik van ID's is vervangen zodat je deze dropdown zo veel op een pagina kan zetten als je wil. Update 29/10/05:
Ik heb een controle voor de meegegeven pagina ingevoerd. Als de pagina die opgegeven is groter is dan het aantal pagina's zal hij automatisch de laatste pagina nemen.
<?php
function navigatie($max_items,$aantal_items,$huidig,$url) {
$paginas = ceil($aantal_items / $max_items);
// Het aantal nodige pagina's berekenen
if($huidig > $paginas) {
// Er is een hoger getal opgegeven dan er pagina's zijn
$huidig = $paginas;
// We zetten $huidig op de laatste pagina
}
$navigatie = '';
if($aantal_items > $max_items) {
//Enkel tonen als er wel een tweede pagina is
$navigatie = '<form action="'.$_SERVER['REQUEST_URI'].'">';
// $navigatie bevat uiteindelijk de knopjes e.d. zelf. Deze zitten in een formulier,
// dat hierboven begint
$navigatie .= '<strong>Navigatie:</strong>'."\n";
// Voor de mensen die nog niet zouden doorhebben dat die cijfertjes wel degelijk
// een betekenis hebben
$url = explode('[--nav--]',$url);
// We exploden op [--nav--]. Dan hebben we het stukje ervoor en erna.
// Maar mocht je een slechte parameter opgeven, dan krijg je lege output (false).
if(count($url) != 2) {
return false;
}
// Zoals je ziet :p
if($huidig != 1) {
// Als we niet op de eerste pagina zijn...
$navigatie .= '<input type="button" value="<<" onclick="window.location=\''.$url[0].'1'.$url[1].'\'" /> '."\n";
$navigatie .= '<input type="button" value="<" onclick="window.location=\''.$url[0].($huidig-1).$url[1].'\'" /> '."\n";
// .. dan komt er een "eerste" en "vorige" knoppie
}
$navigatie .= '<select onchange="window.location=\''.$url[0].'\' + this.value + \''.$url[1].'\'">'."\n";
// Dit is de keuzelijst zelf. Wanneer je een cijfer aanklikt wordt het formulier automatisch verzonden.
// Gebruikers zonder JavaScript kunnen het schudden ;-)
for($i = 1; $i < ($paginas + 1); $i++) {
$navigatie .= ' <option value="'.$i.'"'.($i == $huidig ? ' selected' : '').'>'.$i.'</option>'."\n";
// Voor iedere pagina mag er een nummertje, maar je begint bij 1 en eindigt dus ook bij
// het aantal pagina's.
}
$navigatie .= '</select>'."\n";
// En we sluiten de keuzelijst netjes af zoals het hoor.
if($huidig != $paginas) {
// Als we ons niet op het aantal pagina's bevinden (de laatste zoals dat ook wel heet),
// dan krijg je ook een "volgende" en "laatste" knop te zien.
$navigatie .= ' <input type="button" value=">" onclick="window.location=\''.$url[0].($huidig + 1).$url[1].'\'" /> '."\n";
$navigatie .= '<input type="button" value=">>" onclick="window.location=\''.$url[0].($paginas).$url[1].'\'" />'."\n";
// Inderdaad :]
}
}
$begin = (($huidig-1)*$max_items);
// Over het algemeen wordt hiermee brol uit een database gelezen, dus de beginwaarde voor je query =
// (deze pagina - 1) * aantal items per pagina
// vb.: we bevinden ons op pagina 3 met een $max_items van 30,
// dan komt er in je LIMIT van je query: LIMIT 60,30
$ret['navigatie'] = $navigatie;
$ret['begin'] = $begin;
$ret['max'] = $max_items;
$ret['huidig'] = $huidig;
$ret['paginas'] = $paginas;
// Dit is de output.
return $ret;
}
?>
<?php
function navigatie($max_items,$aantal_items,$huidig,$url){