ik heb de volgende tabel (alleen relevante data):
Het idee is dat ik via de querystring een id aanroep, waarna de navigatie - een uitgeklapt menu - gebouwd wordt door een recursieve functie. Ga uit van index.php?id=56, dan moet de output zijn:
Tweede voorbeeld: index.php?id=11 zou als output moeten geven:
In mijn pogingen dit te bereiken heb ik nu het volgende:
Maar in het eerste voorbeeld genereert deze de volgende output:
Je ziet - ik zit met twee problemen:
• het menu zit in omgekeerde volgorde
• de output wordt 'laag voor laag' geparsed - in plaats dat dienst A en dienst B onder 'over ons' staan, staan zij onder (of eigenlijk: boven) contact
Ik zit hier nu al een aantal avonden op te stoeien, maar kom niet verder. Kan iemand mij op weg helpen?
code:
1
2
3
4
5
6
7
8
9
10
| +---------+----------+-----------+ | node_id | node_pid | node_name | +---------+----------+-----------+ | 3 | 55 | contact | | 11 | 55 | over ons | | 54 | 55 | diensten | | 55 | 0 | home | | 56 | 54 | dienst A | | 58 | 54 | dienst B | +---------+----------+-----------+ |
Het idee is dat ik via de querystring een id aanroep, waarna de navigatie - een uitgeklapt menu - gebouwd wordt door een recursieve functie. Ga uit van index.php?id=56, dan moet de output zijn:
HTML:
1
2
3
4
5
6
| home contact over ons diensten dienst A (vet gedrukt) dienst B |
Tweede voorbeeld: index.php?id=11 zou als output moeten geven:
HTML:
1
2
3
4
| home contact over ons (vet gedrukt) diensten |
In mijn pogingen dit te bereiken heb ik nu het volgende:
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
| $tree = ''; $indent = ''; function get_tree($id) { global $tree, $indent; $res_parent = db_query('SELECT node_pid, node_name FROM nodes WHERE node_id = '.$id, 1, 0); $row_parent = db_fetch_array($res_parent); $res_bros = db_query('SELECT node_id, node_name FROM nodes WHERE node_pid = '.$row_parent['node_pid'], 1, 0); $num_bros = db_num_rows($res_bros); for ($i = 0; $i < $num_bros; $i++) { $row_bros = db_fetch_array($res_bros); $tree .= $indent.$row_bros['node_name'].'<br>'; } $indent .= ' '; if($row_parent['node_pid'] != 0) { $tree .= get_tree($row_parent['node_pid']); } } get_tree($_GET['id']); |
Maar in het eerste voorbeeld genereert deze de volgende output:
HTML:
1
2
3
4
5
6
| dienst A dienst B contact over ons diensten home |
Je ziet - ik zit met twee problemen:
• het menu zit in omgekeerde volgorde
• de output wordt 'laag voor laag' geparsed - in plaats dat dienst A en dienst B onder 'over ons' staan, staan zij onder (of eigenlijk: boven) contact
Ik zit hier nu al een aantal avonden op te stoeien, maar kom niet verder. Kan iemand mij op weg helpen?
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."