login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Menu met uitklapbare submenu's (Opgelost)

Offline Ultimatum - 05/11/2007 23:08
Avatar van UltimatumPHP expert Ey, ik heb deze code gevonden op het forum (dank aan Grayen ). En wat aangepast zodat hij bij mij werkt. Maar nu heb ik de volgende vraag. Nu staan mijn submenu's al direct onder het parentmenu. Maar hoe kan ik het maken dat als je er op klikt, dan pas de submenu's te voorschijn komen?

  1. <?php
  2. function submenu($current, $rows, $layer = 0) {
  3.  
  4. global $settings;
  5.  
  6. foreach($rows as $key => $value) {
  7.  
  8. if($value['menu_sub'] == $current) {
  9.  
  10. echo '<li><a href="'. $settings['url'] .'/'. (!empty($value['menu_groep']) ? $value['menu_groep'] : '') .'/'. strtolower($value['menu_link']) .'/">'. $value['menu_name'] .'</a></li>' . "\n";
  11.  
  12. unset($rows[$key]);
  13.  
  14. submenu($value['menu_id'], $rows, $layer + 1);
  15.  
  16. }
  17. }
  18.  
  19. return true;
  20. }
  21. ?>


Zo pas ik het toe:
  1. <?php
  2. $menus = array();
  3. $select = $db->query("SELECT menu_id, menu_name, menu_link, menu_view, menu_sub, menu_groep
  4. FROM menus
  5. ORDER BY menu_order ASC");
  6. while($arr = $db->fetch($select)) {
  7.  
  8. if(menuAccess($arr['menu_groep'], $arr['menu_view'])) {
  9.  
  10. $menus[] = $arr;
  11.  
  12. }
  13. }
  14.  
  15. submenu(0, $menus);
  16. ?>


De functie menuAccess heb ik van dit script "gejat" . (Dank aan Rens)

10 antwoorden

Gesponsorde links
Offline delta_004 - 06/11/2007 08:28
Avatar van delta_004 Onbekend Dat is hierin niet mogelijk, je geeft nu alleen het PHP gedeelte. Maar je ziet ergens in je html een mouseover ofzo? Probeer dat eens te veranderen naar onClick
Offline Ultimatum - 06/11/2007 08:53
Avatar van Ultimatum PHP expert Huh? Wat bedoel je. Dat bedoel ik niet, en hier staat toch mijn html in? (Regel 10, eerste blok). En ik wil het aan de hand van GET doen ofzo, niet met javascript of wat dan ook..
Offline Grayen - 06/11/2007 14:03
Avatar van Grayen PHP ver gevorderde Zoiets? Ik weet niet of het werkt, want ik kan het nu niet testen, maar in theorie moet het kloppen, omdat je nu controleert of de parentmenu zijn submenu's wel mag weergeven.

  1. <?php
  2. function submenu($current, $rows, $layer = 0) {
  3.  
  4. global $settings;
  5.  
  6. foreach($rows as $key => $value) {
  7.  
  8. if($value['menu_sub'] == $current) {
  9.  
  10. echo '<li><a href="'. $settings['url'] .'/'. (!empty($value['menu_groep']) ? $value['menu_groep'] : '') .'/'. strtolower($value['menu_link']) .'/">'. $value['menu_name'] .'</a></li>' . "\n";
  11.  
  12. unset($rows[$key]);
  13.  
  14. if ($value['menu_id'] == $_GET['menu_id']) {
  15.  
  16. submenu($value['menu_id'], $rows, $layer + 1);
  17.  
  18. }
  19. }
  20. }
  21.  
  22. return true;
  23. }
  24. ?>
Offline Ultimatum - 06/11/2007 14:30
Avatar van Ultimatum PHP expert Hmm, krijg het echt niet aan de praat. Ik zal eens even wat meer info geven denk ik .

ik heb een veld sub_menu in de database, en daar staat een id van partent in, maar in de url pak ik menu_link. Dus moet ik de een string vergelijken en lukt het niet met een id, zoals jij doet. Ik krijg geen fouten meer opzich, maar er het submenu komt ook niet.

http://plaatscode.be/3928/

Dit is de ourput die ik krijg als ik bovenstaande draai.
Citaat:
Array ( [p] => docenten/overzichten [letter] => ) Current: 0
# Home
Current: 0
# Overzichten
Array ( [p] => docenten/overzichten [letter] => ) Current: 0
Current: 0
Current: 0
Current: 0
# Loguit
Current: 0
Current: 0
Current: 0
Current: 0
# Loguit


$current is dus altijd 0 waardoor er geen submenu komt, maar weet niet hoe ik het moet oplossen 
Offline Grayen - 06/11/2007 14:39
Avatar van Grayen PHP ver gevorderde Zou je met PHPMyAdmin je MySQL tabel + rijen die erin zitten kunnen geven, dan kan ik het ook testen, anders is het moeilijker om tot de oplossing te komen.
Offline Ultimatum - 06/11/2007 14:55
Avatar van Ultimatum PHP expert Beetje een rommeltje maar dit gebruik ik:
  1. DROP TABLE IF EXISTS `menus`;
  2. CREATE TABLE `menus` (
  3. `menu_id` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `menu_name` varchar(200) collate latin1_general_ci NOT NULL,
  5. `menu_link` varchar(200) collate latin1_general_ci NOT NULL,
  6. `menu_view` tinyint(1) NOT NULL,
  7. `menu_order` tinyint(2) NOT NULL,
  8. `menu_sub` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  9. `menu_groep` varchar(50) collate latin1_general_ci NOT NULL,
  10. PRIMARY KEY (`menu_id`)
  11. ) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
  12.  
  13. INSERT INTO `menus` VALUES ('7','Home','home','0','1','0','0');
  14. INSERT INTO `menus` VALUES ('2','Overzichten','overzichten','3','2','0','docenten');
  15. INSERT INTO `menus` VALUES ('3','Studenten','studentenoverzicht','3','3','2','docenten');
  16. INSERT INTO `menus` VALUES ('4','Bedrijven','bedrijvenoverzicht','3','4','2','docenten');
  17. INSERT INTO `menus` VALUES ('5','Projecten','projectenoverzicht','3','5','2','docenten');
  18. INSERT INTO `menus` VALUES ('8','Login','login','1','2','0','0');
  19. INSERT INTO `menus` VALUES ('9','Aanmelden','aanmelden','1','3','0','0');
  20. INSERT INTO `menus` VALUES ('10','Contact','contact','1','4','0','0');
  21. INSERT INTO `menus` VALUES ('11','Nieuws','nieuws','3','1','0','0');
  22. INSERT INTO `menus` VALUES ('12','Loguit','loguit','2','5','0','0');


Met het laatste veld controleer ik of iemand toegang heeft als view op 3 staat. (Zie script van Rens in beginpost)
Offline Grayen - 06/11/2007 20:19
Avatar van Grayen PHP ver gevorderde Hij werkt zo, alleen zijn er natuurlijk nu geen eeuwige submenu's meer, omdat je aangeeft welke opgeklapt mag worden en deze er maar een kan zijn, kan hij met mijn script nooit dieper als een menu gaan. Maar dit is waarschijnlijk wat je wilde:

Plaatscode: 3935

Succes .
Offline Ultimatum - 06/11/2007 22:55 (laatste wijziging 07/11/2007 07:20)
Avatar van Ultimatum PHP expert Bedankt Grayen, zie nu wel de submenus als ik op een link klik. Maar als ik dan op een submenu klik dan verdwijnt alles. Kan het ook zo dat de submenus wel blijven staan?

Heb nu dit, moest paar dingen veranderen
Plaatscode: 3939

btw: lees het nu pas, maar ik hoef ook geen eeuwige submenu's, 2 levels is genoeg
Offline Grayen - 07/11/2007 13:37
Avatar van Grayen PHP ver gevorderde Omdat je in url geen id hebt maar een link wordt dit best irritant, het makelijkste lijkt mij een sessie hiervoor aan te maken met daarin alle parentmenu's die open staan en dan in plaats van:

  1. $value['menu_link'] == splitPage()


dan zoiets

  1. in_array($value['menu_link'], $_SESSION['subs'])


Ik denk dat je wel begrijpt wat ik bedoel. Op deze manier kun je wel eeuwige subs maken.
Offline Ultimatum - 07/11/2007 13:58 (laatste wijziging 07/11/2007 14:22)
Avatar van Ultimatum PHP expert Hmm.., zo kan het ook wel ja. Zal even testen .

Ik heb het nu opgelost met een beetje sturing van Grayen . Heb beetje anders opgelost:
Een extra function subs aangemaakt.
  1. <?php
  2. function submenu($current, $rows, $layer = 0) {
  3.  
  4. global $settings;
  5.  
  6. foreach($rows as $key => $value) {
  7.  
  8. if($value['menu_sub'] == $current) {
  9.  
  10. echo '<li><a href="'. $settings['url'] .'/'. (!empty($value['menu_groep']) ? $value['menu_groep'] : '') .'/'. strtolower($value['menu_link']) .'/">'. $value['menu_name'] .'</a></li>';
  11.  
  12. unset($rows[$key]);
  13.  
  14. if ($value['menu_link'] == splitPage() || in_array(splitPage(), $_SESSION['subs'])) {
  15.  
  16. submenu($value['menu_id'], $rows, $layer + 1);
  17.  
  18. }
  19. }
  20. }
  21.  
  22. return true;
  23. }
  24.  
  25. function subs() {
  26.  
  27. global $db;
  28.  
  29. $_SESSION['subs'] = array();
  30.  
  31. $select = $db->query("SELECT menu_link
  32. FROM menus
  33. WHERE menu_sub != 0");
  34.  
  35. while($arr = $db->fetch($select)) {
  36.  
  37. $_SESSION['subs'][] = $arr['menu_link'];
  38.  
  39. }
  40. }
  41. ?>


En bovenaan index.php de functie subs aanroepen om een sessie met subs te maken:
  1. <?php
  2. if(!isset($_SESSION['subs'])) {
  3.  
  4. subs();
  5.  
  6. }
  7. ?>


Appeltje eitje dus . Bedankt 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.256s