Ik probeer een menu uit de database te halen met PHP. Het moet generiek zijn, dus je moet een onbeperkt aantal subitems kunnen toevoegen. Stel mijn database ziet er zo uit:
Dan moet dit eruit komen op de een of andere manier:
Ik heb al op deze link gekeken en ik wil sowieso 'The Adjacency List Model' gebruiken en niet 'The Nested Set Model'. Het lukt me niet om uit te vinden welke logica hierachter zit. Waarschijnlijk zal er ergens een recursieve functie in moeten staan. Uiteraard wil ik alles bij 1 query houden. Stel ik gebruik deze query:
Dan moet je dus van tevoren weten hoeveel niveau's je menu bevat. Daarom moet (?) het dus met de query in de volgende PHP code. Als de database klasse niet duidelijk is hoor ik het wel, maar het spreekt voor zich lijkt me. Ik weet dat je beter eerst een array als resultaat kunt ophalen, maar dat komt later wel. Eerst wil ik weten hoe je zoiets dergelijks maakt. Zo ver ben ik (niet ver dus):
code:
1
2
3
4
5
6
7
8
9
| Pages (id,title,parent,sequence) 1,Hoofd 1,0,0 2,Hoofd 2,0,1 3,Sub 1,2,2 4,Sub 2,2,3 5,Subsub 1,4,4 6,Subsub 2,4,5 7,Sub 3,4,6 8,Hoofd 3,0,7 |
Dan moet dit eruit komen op de een of andere manier:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <ul> <li>Hoofd 1</li> <li> Hoofd 2 <ul> <li>Sub 1</li> <li> Sub 2 <ul> <li>Subsub 1</li> <li>Subsub 2</li> </ul> </li> <li>Sub 3</li> </ul> </li> <li>Hoofd 3</li> </ul> |
Ik heb al op deze link gekeken en ik wil sowieso 'The Adjacency List Model' gebruiken en niet 'The Nested Set Model'. Het lukt me niet om uit te vinden welke logica hierachter zit. Waarschijnlijk zal er ergens een recursieve functie in moeten staan. Uiteraard wil ik alles bij 1 query houden. Stel ik gebruik deze query:
code:
1
2
3
4
5
| SELECT p1.id AS id1,p1.title AS lev1,p2.id AS id2,p2.title AS lev2,p3.id AS id3,p3.title AS lev3 FROM pages AS p1 LEFT JOIN pages AS p2 ON p2.parent=p1.id LEFT JOIN pages AS p3 ON p3.parent=p2.id ORDER BY p1.id,p2.id,p3.id |
Dan moet je dus van tevoren weten hoeveel niveau's je menu bevat. Daarom moet (?) het dus met de query in de volgende PHP code. Als de database klasse niet duidelijk is hoor ik het wel, maar het spreekt voor zich lijkt me. Ik weet dat je beter eerst een array als resultaat kunt ophalen, maar dat komt later wel. Eerst wil ik weten hoe je zoiets dergelijks maakt. Zo ver ben ik (niet ver dus):
code:
1
2
3
4
5
6
7
8
9
10
11
| <?php $tree = array(); $db->query("SELECT id,title,parent FROM pages ORDER BY sequence"); while ($db->nextRecord()) { $pId = $db->f("id"); $tree[$pId]['title'] = $db->f("title"); $tree[$pId]['parent'] = $db->f("parent");; } foreach ($tree as $pId => $pData) { // ???? } |