O jakiegoś czasu męczę się z problemem poprawnego generowania wielopoziomowych list.
Listy przedstawiają strukturę drzewiastą z bazy, a dokładniej kategorie i podkategorie.
Dotychczas stosowałem spacje by uzyskać pożądany efekt jednak teraz muszę skorzystać z list <ul><li> Podchodziłem do tego tematu już wiele razy jednak zawsze z marnymi rezultatami.
Na poniższym screenie graficzne przedstawienie problemu:
http://img145.imageshack.us/img145/6786/kategorieiw9.jpg
Po lewej mamy przedstawioną tabelkę z poprawnie wyglądającą listą kategorii(ustawioną za pomocą spacji) dodatkowo pokazałem tam dane z bazy. Po prawej natomiast widok poprawnie wyglądającej listy(Wpisana manualnie). Nie mam już siły na te listy więc proszę was o sugestie, pomoc w tym temacie.
Tablica kategorii wystarczy ją dodać przez include i objechać foreachem z magicznym kodem

Dodatkowo podam jeszcze poprawny kod listy:
Kod
<ul>
<li>Windows
<ul>
<li>Win 98
<ul>
<li>Win 98 SE</li>
</ul>
</li>
<li>Win XP
<ul>
<li>Win XP Basic</li>
<li>Win Xp Profesional</li>
</ul>
</li>
<li>Win Vista
<ul>
<li>Win Vista Starter</li>
<li>Win Vista Home Basic</li>
<li>Win Vista Home Premium</li>
<li>Win Vista Business</li>
<li>Win Vista Enterprise</li>
<li>Win Vista Ultimate</li>
</ul>
</li>
<li>Win 95</li>
</ul>
</li>
<li>Linux
<ul>
<li>Debian</li>
<li>Gentoo</li>
<li>Mandriva Linux</li>
<li>Ubuntu</li>
<li>Slackware</li>
<li>Red Hat Linux</li>
</ul>
</li>
<li>Mac OS
<ul>
<li>Mac OS X 10.3 Panther</li>
<li>Mac OS X 10.4 Tiger</li>
<li>Mac OS X 10.5 Leopard</li>
</ul>
</li>
<li>Testowa A
<ul>
<li>Testowa AB
<ul>
<li>Testowa ABC
<ul>
<li>Testowa ABCD
<ul>
<li>Testowa ABCDE</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<li>Windows
<ul>
<li>Win 98
<ul>
<li>Win 98 SE</li>
</ul>
</li>
<li>Win XP
<ul>
<li>Win XP Basic</li>
<li>Win Xp Profesional</li>
</ul>
</li>
<li>Win Vista
<ul>
<li>Win Vista Starter</li>
<li>Win Vista Home Basic</li>
<li>Win Vista Home Premium</li>
<li>Win Vista Business</li>
<li>Win Vista Enterprise</li>
<li>Win Vista Ultimate</li>
</ul>
</li>
<li>Win 95</li>
</ul>
</li>
<li>Linux
<ul>
<li>Debian</li>
<li>Gentoo</li>
<li>Mandriva Linux</li>
<li>Ubuntu</li>
<li>Slackware</li>
<li>Red Hat Linux</li>
</ul>
</li>
<li>Mac OS
<ul>
<li>Mac OS X 10.3 Panther</li>
<li>Mac OS X 10.4 Tiger</li>
<li>Mac OS X 10.5 Leopard</li>
</ul>
</li>
<li>Testowa A
<ul>
<li>Testowa AB
<ul>
<li>Testowa ABC
<ul>
<li>Testowa ABCD
<ul>
<li>Testowa ABCDE</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
Najlepsze wyniki do jakich doszedłem to poprawne wyświetlanie list ale niepoprawne zagnieżdżanie:
<?php function showHtmlLists(){ include_once(ROOT_DIR.'kategorieArray.php'); $li = '<ul>'; $tmpLevel = 0; foreach($categories as $elem){ if($elem['level'] > $tmpLevel){ $li .='<ul>'; }elseif($elem['level'] < $tmpLevel){ $li .='</ul>'; } $li .= '<li>'.$elem['name'].'</li>'; $tmpLevel = $elem['level']; } $li .= '</ul>'; return $li; } ?>