login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Navigatie systemen > Menu met levels

Menu met levels

Auteur: Rens - 07 mei 2006 - 20:15 - Gekeurd door: Thomas - Hits: 12257 - Aantal punten: 4.63 (4 stemmen)




Als eerste een stukje uitleg om het wat begrijpelijker te maken.
De functie zorgt er voor dat er gekeken word of de bezoeker toegang heeft tot een bepaalde pagina.
Er zijn minimaal 2 dingen nodig, 'view' en 'level'.
'View' kan 4 verschillende waarden bevatten, namelijk:
0 = Altijd
1 = Ingelogd
2 = Uitgelogd
3 = Speciaal level
Als je '0' invult in 'view', is de pagina altijd toegankelijk voor elke bezoeker.
Maar als je '1' invult, moet de bezoeker ingelogd zijn om de pagina te kunnen bekijken.
Bij '2' moet de bezoeker uitgelogd zijn, en bij '3' moet de bezoeker een speciaal level hebben
om de pagina te kunnen bekijken.

Dan is er nog 'level'.
Die hoef je alleen maar in te vullen als 'view' op '3' staat.
Daarvoor zijn net zoveel verschillende waarden als je gebruikerslevels hebt.
Even een klein voorbeeldje:
crew = Voor de hele crew
0 = Lid
1 = Medewerker
2 = Admin
3 = Super-Admin
4 = Co-Beheerder
5 = Beheerder

De 'view' en 'level' worden uit de database gehaald.
Dan word er in de functie gekeken of de bezoeker de pagina mag zien.
Als de bezoeker bijvoorbeeld level 2 heeft, dus hij/zij is een Admin, mag hij pagina's bezoeker waarbij het level op '2' staat
of op 'crew'.

Er kunnen meerdere levels worden ingevuld in 'level'.
Deze worden dan gescheiden door een komma.
Dus als een Medewerker en een Beheerder op pagina.php mogen komen, zet je het volgende in 'level':
'1,5'

Om het te testen kun je het scriptje voorbeeld.menu.php gebruiken.
Bij de variabele $iLevel kun je verschillende levels proberen.

Ik hoop dat het zo duidelijk is...

Als je het niet snapt a.d.h.v. deze uitleg moet je maar eens wat gaan spelen met de code.
Extra rijen in de MySQL tabel zetten en zo.
Denk dat het dan duidelijker word...

Code:
Voorbeeld MySQL code:
  1. CREATE TABLE menu (
  2. id INT(11) NOT NULL auto_increment,
  3. naam VARCHAR(255) NOT NULL,
  4. pagina VARCHAR(255) NOT NULL,
  5. view TINYINT(1) NOT NULL,
  6. level VARCHAR(255) NOT NULL,
  7. PRIMARY KEY(id)
  8. )TYPE=MyISAM;
  9.  
  10. INSERT INTO menu (naam, pagina, view, level) VALUES ('Begin', '?pagina=begin', 0, 0);
  11. INSERT INTO menu (naam, pagina, view, level) VALUES ('Aanmelden', '?pagina=leden/aanmelden', 2, 0);
  12. INSERT INTO menu (naam, pagina, view, level) VALUES ('Inloggen', '?pagina=leden/inloggen', 2, 0);
  13. INSERT INTO menu (naam, pagina, view, level) VALUES ('Uitloggen', '?pagina=leden/uitloggen', 1, 0);
  14. INSERT INTO menu (naam, pagina, view, level) VALUES ('Admin menu', '?pagina=admin/index', 3, 'crew');


Voorbeeld menu code:
  1. <?PHP
  2. $iLevel = 0;
  3. include "function.menu.php";
  4. $sQuery = "SELECT * FROM menu";
  5. if(!$rResult = MySQL_Query($sQuery))
  6. {
  7. echo "MySQL Error: ".MySQL_Error()."<br />";
  8. echo "MySQL Errno: ".MySQL_Errno()."<br />";
  9. echo "Bestand: ".__FILE__."<br />";
  10. echo "Regel nr: ".__LINE__;
  11. } else
  12. {
  13. while($aFetch = MySQL_Fetch_Assoc($rResult))
  14. {
  15. if(menuToegang($aFetch['level'], $aFetch['view'], $iLevel))
  16. {
  17. echo '<a href="'.$aFetch['pagina'].'">'.$aFetch['naam'].'</a><br />';
  18. }
  19. }
  20. }
  21. ?>


function.menu.php:
  1. <?PHP
  2. /**
  3.  * @date 07-05-2006 20:00
  4.  * @param integer iLevel
  5.  * @param integer iView
  6.  * @param integer iUserLevel
  7.  * @return boolean
  8.  * @author Rensjuh <rensjuh@gmail.com>
  9. **/
  10. function menuToegang($iLevel, $iView, $iUserLevel="")
  11. {
  12. $bView = FALSE;
  13. if($iView == 0)
  14. {
  15. $bView = TRUE;
  16. } else if($iView == 1)
  17. {
  18. $bView = (IsSet($_SESSION['id']) && Is_Numeric($_SESSION['id']));
  19. } else if($iView == 2)
  20. {
  21. $bView = (!IsSet($_SESSION['id']) || !Is_Numeric($_SESSION['id']));
  22. } else if($iView == 3)
  23. {
  24. if(ereg(",", $iLevel))
  25. {
  26. $aLevel = explode(",", $iLevel);
  27. $bView = ((In_Array($iUserLevel, $aLevel)) || ($iLevel == "crew" && $iUserLevel != 0));
  28. } else
  29. {
  30. $bView = (($iUserLevel == $iLevel) || ($iLevel == "crew" && $iUserLevel != 0));
  31. }
  32. } else
  33. {
  34. $bView = FALSE;
  35. }
  36. return $bView;
  37. }
  38. ?>


Bitwise versie (FangorN zijn idee):
  1. <?PHP
  2. /**
  3.  * @date 07-05-2006 20:00
  4.  * @param integer iLevel
  5.  * @param integer iView
  6.  * @param integer iUserLevel
  7.  * @return boolean
  8.  * @author Rensjuh <rensjuh@gmail.com>
  9. **/
  10. function menuToegang($iLevel, $iView, $iUserLevel="")
  11. {
  12. $bView = FALSE;
  13. if($iView == 0)
  14. {
  15. $bView = TRUE;
  16. } else if($iView == 1)
  17. {
  18. $bView = (IsSet($_SESSION['id']) && Is_Numeric($_SESSION['id']));
  19. } else if($iView == 2)
  20. {
  21. $bView = (!IsSet($_SESSION['id']) || !Is_Numeric($_SESSION['id']));
  22. } else if($iView == 3)
  23. {
  24. if($iLevel == "crew" && $iUserLevel != 0)
  25. {
  26. $bView = TRUE;
  27. } else
  28. {
  29. $bView = ($iLevel & $iUserLevel);
  30. }
  31. } else
  32. {
  33. $bView = FALSE;
  34. }
  35. return $bView;
  36. }
  37. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

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