In PHP/MySQL ben ik een menusysteem aan het bouwen. Ieder menuitem is een zgn. node-object in PHP, met bekende DOM-properties/methods als parentNode, childNodes, appendChild etc.
Dit node-object schrijft de boomstructuur weg in de volgende tabel:
Waarin nodeId = het ID van de node (er is ook nog een tabel node, met daarin gegevens over de node), parentNodeId is de...juist... en order is het volgnummer van deze node t.o.v. zijn broertjes en zusjes.
Bijv. de volgende boomstructuur, waarin de getallen nodeId's zijn:
Je kunt dan een node instantieren met:
Maar nu komt het probleem: ik wil dat nodes op meerdere plekken in de tree kunnen verschijnen, bijv.
Als ik nu echter een object van node 5 maak, weet PHP niet welke van de twee (het kind van node 1 of het kind van node 2) hij moet nemen in de database! Hierdoor werken functies als getPreviousSibling niet meer, want volgens de database kan dit zowel node 9 als node 6 zijn.
Wat moet ik veranderen aan mijn opzet?
Dit node-object schrijft de boomstructuur weg in de volgende tabel:
code:
1
2
3
| integer nodeId integer parentNodeId integer order |
Waarin nodeId = het ID van de node (er is ook nog een tabel node, met daarin gegevens over de node), parentNodeId is de...juist... en order is het volgnummer van deze node t.o.v. zijn broertjes en zusjes.
Bijv. de volgende boomstructuur, waarin de getallen nodeId's zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| 1---+ | | | +-- 5 (parentNode=1, order=1) | | | +-- 6 (parentNode=1, order=2) | 2---+ | | | +-- 10 (parentNode=2, order=1) | | | +-- 9 (parentNode=2, order=2) | | | +-- 3 (parentNode=2, order=3) |
Je kunt dan een node instantieren met:
PHP:
1
2
3
4
5
6
7
| $oNode = new node(2); //pak node 2 $aoChildNodes = $oNode->getChildNodes(); print_r($aoChildNodes[0]); //print node 10 print_r($aoChildNodes[1]); //print node 9 print_r($aoChildNodes[2]); //print node 3 |
Maar nu komt het probleem: ik wil dat nodes op meerdere plekken in de tree kunnen verschijnen, bijv.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| 1---+ | | | +-- 6 | | | +-- 5 | 2---+ | | | +-- 10 | | | +-- 9 | | | +-- 5 |
Als ik nu echter een object van node 5 maak, weet PHP niet welke van de twee (het kind van node 1 of het kind van node 2) hij moet nemen in de database! Hierdoor werken functies als getPreviousSibling niet meer, want volgens de database kan dit zowel node 9 als node 6 zijn.
Wat moet ik veranderen aan mijn opzet?
[ Voor 3% gewijzigd door Rekcor op 26-06-2007 13:33 . Reden: typo ]