Do stejného problému jsem se před pár dny pustil vlastními silami já. Musím říct, že to není jednoduchý úkol, ale jde to! Můj zatím ne úplně dokončený pokus je zde:
http://www.kpmhd-ova.cz/zkdb/index.php?s=zk.
Ještě nefunguje skrývání resp. rozbalování podkategorií při kliknutí na křížek, nicméně javascriptem a CSS vlastností Visibility by to neměl být problém, rozhodně ne větší než to, co už je hotovo.
Položky menu čtu z tabulky v databázi se strukturou:
Položka - zobrazený název položky,
rodič - nadřazená položka (případně ,,root" u nejvyšší položky)
Odkaz - odkaz při kliknutí na název položky (já tam mám teda SQL dotaz, který se pak předává dalšímu skriptu, ale to je detail).
Samotný skript přikládám, ikdyž taky bude chtít ještě dooptimalizovat (je napsán rukama spíš elektrotechnika než programátora). Jeho obsah je asi takovýto:
Připojení k databázi, nějaké pomocné proměnné,... vyberou se všechny položky s rodičem ,,root" a teď se prochází cyklem po jedné, vždy se k nim zobrazí ikonka, název a zavolá se k dané položce funkce ,,polozky( $rodic )" s parametrem rodič, na místo kterého se dosadí právě vypsaná položka. Samotná funkce pak dělá v podstatě to samé, vybere položky jejíž rodič je položka, u které se funkce zavolala, postupně je vypisuje a zjišťuje zase jejich ,,děti" tím, že sama sebe rekurzivně volá ke každé další položce. Pak tam je plno větvení kvůli vybírání správných ikonek stromu (
http://www.kpmhd-ova.cz/zkdb/grafika/strom/), podmínka ,,if ( $polozky[$i]["polozka"][0] != "_" ) {....}" pro moje účely, protože tam mám jisté položky s názvem začínajícím na ,,_", které budou mít speciální význam a budu je muset řešit jinak atd.
Kdyby byly nějaké dotazy ke kódu, snad dokážu poradit.