login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Navigatie systemen > Navigatie-functie met dropdown

Navigatie-functie met dropdown

Auteur: Maarten - 06 september 2005 - 19:30 - Gekeurd door: Maarten - Hits: 6098 - Aantal punten: 2.79 (7 stemmen)



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:
  1. <?php
  2. include 'bestandmetdiefunctie.php';
  3. // Ik veronderstel dat dit wel duidelijk is ;-)
  4.  
  5. $aantal_items = mysql_result(mysql_query("SELECT COUNT(id) FROM tabel WHERE iets = 'ietsanders'"),0);
  6. // Hiermee haal je het aantal beschikbare items op, lijkt me ook duidelijk
  7.  
  8. $navigatie = navigatie(30,$aantal_items,$_GET['nav'],'?pagina=forum&cat=php&topic=4&nav=[--nav--]');
  9. // Je ziet dat de laatste paramater [--nav--] bevat. Hier komt het nummer van de pagina waar je uitkomt bij het aanklikken van dropdowns / knoppen
  10. // Waarom is dit handig? Wel, neem onderstaand voorbeeld:
  11. $navigatie = navigatie(30,$aantal_items,$_GET['nav'],'/forum/topics/4/[--nav--].html');
  12. // Zie je: je kan de navigatie in het midden van je url draaien zonder problemen.
  13.  
  14.  
  15. // Als je nu hier een dropdown en knopjes wilt (navigatie dus):
  16. echo $navigatie['navigatie'];
  17.  
  18. // Als je nu een bijhorende query wilt maken:
  19. $query = mysql_query("SELECT velden FROM tabel WHERE cat = ".$_GET['cat']." LIMIT ".$navigatie['begin'].",".$navigatie['max']) or die(mysql_error());
  20.  
  21. // De overige outputs "paginas" en "huidig" dienen meer om te debuggen, maar als je dit wilt meedelen aan de gebruiker kan dit ook, met
  22. echo $navigatie['paginas'];
  23. echo $navigatie['huidig'];
  24. ?>

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.

Code:
  1. <?php
  2. function navigatie($max_items,$aantal_items,$huidig,$url) {
  3.  
  4. $paginas = ceil($aantal_items / $max_items);
  5. // Het aantal nodige pagina's berekenen
  6.  
  7. if($huidig > $paginas) {
  8. // Er is een hoger getal opgegeven dan er pagina's zijn
  9. $huidig = $paginas;
  10. // We zetten $huidig op de laatste pagina
  11. }
  12.  
  13. $navigatie = '';
  14. if($aantal_items > $max_items) {
  15. //Enkel tonen als er wel een tweede pagina is
  16.  
  17. $navigatie = '<form action="'.$_SERVER['REQUEST_URI'].'">';
  18. // $navigatie bevat uiteindelijk de knopjes e.d. zelf. Deze zitten in een formulier,
  19. // dat hierboven begint
  20.  
  21. $navigatie .= '<strong>Navigatie:</strong>'."\n";
  22. // Voor de mensen die nog niet zouden doorhebben dat die cijfertjes wel degelijk
  23. // een betekenis hebben
  24.  
  25. $url = explode('[--nav--]',$url);
  26. // We exploden op [--nav--]. Dan hebben we het stukje ervoor en erna.
  27. // Maar mocht je een slechte parameter opgeven, dan krijg je lege output (false).
  28. if(count($url) != 2) {
  29. return false;
  30. }
  31. // Zoals je ziet :p
  32.  
  33. if($huidig != 1) {
  34. // Als we niet op de eerste pagina zijn...
  35. $navigatie .= '<input type="button" value="&lt;&lt;" onclick="window.location=\''.$url[0].'1'.$url[1].'\'" />&nbsp;'."\n";
  36. $navigatie .= '<input type="button" value="&lt;" onclick="window.location=\''.$url[0].($huidig-1).$url[1].'\'" />&nbsp;'."\n";
  37. // .. dan komt er een "eerste" en "vorige" knoppie
  38. }
  39.  
  40. $navigatie .= '<select onchange="window.location=\''.$url[0].'\' + this.value + \''.$url[1].'\'">'."\n";
  41. // Dit is de keuzelijst zelf. Wanneer je een cijfer aanklikt wordt het formulier automatisch verzonden.
  42. // Gebruikers zonder JavaScript kunnen het schudden ;-)
  43.  
  44. for($i = 1; $i < ($paginas + 1); $i++) {
  45. $navigatie .= ' <option value="'.$i.'"'.($i == $huidig ? ' selected' : '').'>'.$i.'</option>'."\n";
  46. // Voor iedere pagina mag er een nummertje, maar je begint bij 1 en eindigt dus ook bij
  47. // het aantal pagina's.
  48. }
  49.  
  50. $navigatie .= '</select>'."\n";
  51. // En we sluiten de keuzelijst netjes af zoals het hoor.
  52.  
  53. if($huidig != $paginas) {
  54. // Als we ons niet op het aantal pagina's bevinden (de laatste zoals dat ook wel heet),
  55. // dan krijg je ook een "volgende" en "laatste" knop te zien.
  56.  
  57. $navigatie .= '&nbsp;<input type="button" value="&gt;" onclick="window.location=\''.$url[0].($huidig + 1).$url[1].'\'" />&nbsp;'."\n";
  58. $navigatie .= '<input type="button" value="&gt;&gt;" onclick="window.location=\''.$url[0].($paginas).$url[1].'\'" />'."\n";
  59. // Inderdaad :]
  60. }
  61. }
  62.  
  63. $begin = (($huidig-1)*$max_items);
  64. // Over het algemeen wordt hiermee brol uit een database gelezen, dus de beginwaarde voor je query =
  65. // (deze pagina - 1) * aantal items per pagina
  66. // vb.: we bevinden ons op pagina 3 met een $max_items van 30,
  67. // dan komt er in je LIMIT van je query: LIMIT 60,30
  68.  
  69. $ret['navigatie'] = $navigatie;
  70. $ret['begin'] = $begin;
  71. $ret['max'] = $max_items;
  72. $ret['huidig'] = $huidig;
  73. $ret['paginas'] = $paginas;
  74. // Dit is de output.
  75.  
  76. return $ret;
  77. }
  78. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (3)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.041s