In een mysql database heb ik een parent-child relatie tabel. Deze tabel wil ik recursief uitlezen en in een xhtml correct lijst weergeven, om een sitemap te genereren. Ik heb alleen problemen met de afsluitende <li>. Als er namelijk nog kinderen onder de huidige node hangen, moet mag die <li> nog niet afgesloten worden - dit gebeurt echter wel. Ik heb de afsluitende </li> tag al all over de functie gehad, maar kom er niet uit. Wie helpt mij op weg?
Dit genereert echter een </li> teveel:
Iemand een idee hoe ik dit kan oplossen. Het probleem is dat ik niet elke <li> direct kan afsluiten. Hij moet namelijk 'open' blijven tot ik zeker weet dat hij geen kinderen heeft. Dan pas kan ik een </li> zetten...
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
| function sitemap_form($pid=1, $level=0) { static $output; $result = db_query("SELECT * FROM nodes WHERE pid = %d ORDER BY weight ASC", $pid); $endul = ($level != 0) ? '</ul></li>' : '</ul>'; if (db_num_rows($result) != 0) { $endli = ''; $output .= '<ul>'; for ($i = 0; $i < db_num_rows($result); $i++) { $node = db_fetch_array($result); $href = ($node['alias']) ? $node['alias'] : $node['nid']; $output.= '<li><a href="'.$href.'">'.$node['title'].'</a>'; sitemap_form($node['nid'], $level+1); $output.= '</li>'; } $output.= $endul; } return $output; } |
Dit genereert echter een </li> teveel:
HTML:
1
2
3
4
5
6
7
8
9
10
11
| <ul> <li><a href="oplossingen">oplossingen</a> <ul> <li><a href="62">A</a></li> <li><a href="63">B</a></li> </ul> </li> </li> <------------ <li><a href="sitemap">Sitemap</a></li> <li><a href="61">nieuwe pagina</a></li> </ul> |
Iemand een idee hoe ik dit kan oplossen. Het probleem is dat ik niet elke <li> direct kan afsluiten. Hij moet namelijk 'open' blijven tot ik zeker weet dat hij geen kinderen heeft. Dan pas kan ik een </li> zetten...

"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."