PHP menu med XML

Tags:    php menu submenu xml

Hej med jer.
Jeg har lavet en menu i PHP, som her submenu i 1 niveau. Selve menuen kommer fra en XML fil.
Det hele fungerer som sådan fint nok, men jeg har et problem med at få markeret punktet i hovedmenuen som værende aktivt, når man er på en undermenu.

F.eks.

artikler -> kategori 1

Hvis man er på siden der hører til kategori 1, skal det selvfølgelig markeres aktivt. Men punktet artikler også markeres som aktivt, da man jo er under det. Håber det giver mening.

Min XML struktur kommer her:
Fold kodeboks ind/udXML kode 


Koden jeg bruger til at hente menuen ser sådan ud:
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 26.10.2012 08:31 af Bruger #17414
5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Jeg har umiddelbart svært ved at forestille mig en måde hvorpå du kan gøre det effektivt. De løsninger jeg kan komme på involverer ineffektive nestede loops eller en definering af alle børn i forældre rækkerne.

Du ved ikke, når du tjekker en given række, om den har nogen børn, med mindre du looper over alle rækker igen, (så har du n gennemløb med hver n-1 gennemløb i ((n-1)^2*n gennemløb - i vores tilfælde 7 i stedet for de optimale 3 (n)) eller med mindre du laver en ekstra parameter, som indeholder alle børn af elementet.

Det vidner om en ineffektiv struktur; dit menu design er ikke optimalt...

Hvis menuen skrives i XML er den ikke dynamisk, og derfor kunne du lige så godt skrive den i ren html. At lave en konvertering mellem ikke-dynamisk indhold for at lette udviklerens arbejde er en skidt praksis - med mindre det er preprocessor-stilen som SASS i forhold til CSS.

Hvis du generede menuen ud fra en liste af sider i et CMS, så ville du nemt kunne lave et udtræk fra databasen, som havde en dynamisk genereret række med en givens sides børn og forældre. Som i så fald ville være trivielt at lave et effektiv loop på.

Forstår du mine tanker og argumenter - ellers er du velkommen til at spørge.

(Du kan godt få det her til at virke - men det er en dårligt designet løsning set fra et software arkitektonisk synspunkt. Jeg håber ikke at du vender øjne af mit svar og hellere bare ville have en løsning på dit aktuelle problem. Jeg mener bare du er bedre tjent med det her. :-))



Linje 17 - $page til $_GET['page'].



Gustav - Jeg kan ikke lige se hvordan det skulle hjælpe mig med at få markeret niveau 1 i menuen, når man er på niveau 2 ?



Indlæg senest redigeret d. 27.10.2012 09:56 af Bruger #17414
Jeg kiggede vidst ikke din kode grundigt nok igennem.

Har du nogen steder hvor du definerer hvilken side der er parent til den side du er på nu?



Ja i XML'en har jeg. Jeg har bare problemer med at få det defineret korrekt, i den kode der henter menuen ud.

Fold kodeboks ind/udXML kode 


Her definerer root="2" at menuid="2" er parent.



t