Ik ben bezig met het maken van een recursief menu. Ik ben behoorlijk ver gekomen, maw ik krijg het gewenste menu in beeld, maar een optie die ik nog in het menu wil hebbben krijg ik er niet in;
Ik krijg nu als output:
maw: het id van iedere div is het menuItem<uniekID> om ieder menuitem afzonderlijk te kunnen aansturen. De class van iedere div is 'menuItemLevel0' 'menuItemLevel1' etc. etc om voor ieder niveau een andere opmaak aan te kunnen geven.
De tabelstructuur die ik gebruik is de volgende:
Voor ieder menuitem geef ik aan of het menuitem een parent heeft. maw. Wanneer een menuitem een child is, heeft hij in parent_id het id van zijn parent staan.
Nu heb ik hieruit de volgende array kunnen extraheren:
Iedere array bevat;
[0] => Array
(
[id] => id van menuiten
[childs] => Eventuele nieuwe array met gegevens voor child
[parent_id] => ID van parent
[page_id] => 2
[name] => Naam van het menu
[description] => Omschrijving van het menu
)
Nou heb ik in mijn html template een menu-class geschreven;
die roep ik op de volgende manier aan;
Dan krijg ik dus het menu zoals ik dat wil, zie het eerste stukje html
Nu komt het probleem;
Ik krijg nu het hele menu, met alle items, terwijl ik de optie wil hebben om alleen wanneer ik een parent heb aangeklikt, de childs van die specifieke parent weer te geven, de andere parents die hun parent_id op 0 hebben moeten uiteraard wel allemaal weergegeven worden.
Ik krijg het niet voor elkaar om uit de recursieve array te breken...
Ik krijg nu als output:
code:
1
2
3
4
5
| <div id='menuItem1' class='menuItemLevel0'><a href='./?id=1' title='Dit is de homepagina' name='Dit is de homepagina'>Home</a></div> <div id='menuItem2' class='menuItemLevel1'><a href='./?id=2' title='Hier kunt u de informatie over het systeem bekijken' name='Hier kunt u de informatie over het systeem bekijken'>Systeeminformatie</a></div> <div id='menuItem3' class='menuItemLevel2'><a href='./?id=3' title='Wheeeeee' name='Wheeeeee'>Details</a></div> <div id='menuItem4' class='menuItemLevel0'><a href='./?id=4' title='Contactinformatie' name='Contactinformatie'>Contact</a></div> <div id='menuItem5' class='menuItemLevel1'><a href='./?id=5' title='Neem direct contact met ons op!' name='Neem direct contact met ons op!'>Informatieaanvraag</a></div> |
maw: het id van iedere div is het menuItem<uniekID> om ieder menuitem afzonderlijk te kunnen aansturen. De class van iedere div is 'menuItemLevel0' 'menuItemLevel1' etc. etc om voor ieder niveau een andere opmaak aan te kunnen geven.
De tabelstructuur die ik gebruik is de volgende:
code:
1
2
3
4
5
6
| id parent_id page_id name description created 1 0 1 Home Dit is de homepag... 2007-07-09 2 1 3 Systeeminformatie Hier kunt u de in... 2007-07-09 3 2 2 Details Wheeeeee 2007-07-09 4 0 3 Contact Contactinformatie 2007-07-09 5 4 4 Informatieaanvraag Neem direct conta... 2007-07-09 |
Voor ieder menuitem geef ik aan of het menuitem een parent heeft. maw. Wanneer een menuitem een child is, heeft hij in parent_id het id van zijn parent staan.
Nu heb ik hieruit de volgende array kunnen extraheren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| Array ( [0] => Array ( [id] => 1 [childs] => Array ( [0] => Array ( [id] => 2 [childs] => Array ( [0] => Array ( [id] => 3 [childs] => [parent_id] => 2 [page_id] => 2 [name] => Details [description] => Wheeeeee ) ) [parent_id] => 1 [page_id] => 3 [name] => Systeeminformatie [description] => Hier kunt u de informatie over het systeem bekijken ) ) [parent_id] => 0 [page_id] => 1 [name] => Home [description] => Dit is de homepagina ) [1] => Array ( [id] => 4 [childs] => Array ( [0] => Array ( [id] => 5 [childs] => [parent_id] => 4 [page_id] => 4 [name] => Informatieaanvraag [description] => Neem direct contact met ons op! ) ) [parent_id] => 0 [page_id] => 3 [name] => Contact [description] => Contactinformatie ) ) |
Iedere array bevat;
[0] => Array
(
[id] => id van menuiten
[childs] => Eventuele nieuwe array met gegevens voor child
[parent_id] => ID van parent
[page_id] => 2
[name] => Naam van het menu
[description] => Omschrijving van het menu
)
Nou heb ik in mijn html template een menu-class geschreven;
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| class html { function menu($array,$level=1,$currentid=0) { global $menuOutput; $levelCount = $level; foreach($array as $menuitems) { #parent menu-items $menuOutput = $menuOutput."<div id='menuItem" . $menuitems[id] . "' class='menuItemLevel" . $level . "'><a href='./?id=" . $menuitems[id] . "' title='" . $menuitems[description] . "' name='" . $menuitems[description] . "'>" . $menuitems[name] . "</a></div>\n"; $levelCount++; #recursive child menu-items should only show when parent is in row if(is_array($menuitems[childs])) { $this->menu($menuitems[childs],$levelCount,$currentid); } #clear $levelCount after use so next loop starts at 0 again. unset($levelCount); } return $menuOutput; } } |
die roep ik op de volgende manier aan;
PHP:
1
2
3
4
| $frontpage = new html(); $menucontent = $frontpage->menu($menuArrayResult,0,$_GET[id]); echo $frontpage->layer("mainMenu",$menucontent); |
Dan krijg ik dus het menu zoals ik dat wil, zie het eerste stukje html
Nu komt het probleem;
Ik krijg nu het hele menu, met alle items, terwijl ik de optie wil hebben om alleen wanneer ik een parent heb aangeklikt, de childs van die specifieke parent weer te geven, de andere parents die hun parent_id op 0 hebben moeten uiteraard wel allemaal weergegeven worden.
Ik krijg het niet voor elkaar om uit de recursieve array te breken...