Udskrive menu fra Mysql med children

Tags:    php mysql menu

Hejsa.

Nu har jeg tænkt rigtig længe på hvordan jeg kan lave min menu så den ligger i en db og derpå kunne udskrive den.
Jeg kan sagtens udskrive menuens hovedområder, men så snart jeg skal til at udskrive children så går jeg altså i sort.

Det hele skal meget gerne kunne klares i en <ul>.

Er der nogen der kan give mig et skub i den rigtige retning?

Mange tak



10 svar postet i denne tråd vises herunder
8 indlæg har modtaget i alt 14 karma
Sorter efter stemmer Sorter efter dato
Man bør nøjes med et SQL kald når det kommer til hierarkisk menu strukturer. Ville nok også holde mig fra INNER JOIN. Først hvis menuen strukturen bliver rigtig stor er det værd at tage et kig på Nested Set Modellen http://en.wikipedia.org/wiki/Nested_set_model

Men kastede lige noget sammen fra et tidligere projekt:
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 10.09.2011 00:21 af Bruger #10216
Bare et indskud til Daniele's post, så bare for en god ordens skyld, så brug never ever SELECT * i en sql forespørgsel :=)
Men du vil jo heller ikke lave en inner join, så du kun får menuer, der har undermenuer... Du kan lave et loop, der kører igennem dine menuer, og endnu en et loop inden i denne, der itererer gennem dine undermenuer. Start med at kod noget, der viser din root menu og byg videre derpå.



Hej Daniel Mautone

Kan du ikke prøve at poste den kode du får fejlen i så kan jeg prøve at kigge på det.

VH. Malte



Jeg har ikke lavet nogen kode endnu.

Min db er bygget på så den har et felt der hedder parent og hvis den er 0 er det jo en topmenu. hvis ikke så skal den smides ind under den topmenu som har det id der står i parent.



i din først SQL query vælger du alle poster hvor parent er = 0

Så looper du gennem alle resultater udskriver din html og laver et nyt loop inde i dette hvor du vælg poster hvor parent = nuværende id

et eks. i asp kunne se sådan her ud

Fold kodeboks ind/udVBScript kode 


Dette er kun et hurtig eksempel, uden noget html og det skal selvfølgelig også tilpasses til din database.



Hej Daniel.

Jeg tror at jeg ville bruge INNER JOIN i PHP.
Et eksempel kunne være:

Fold kodeboks ind/udPHP kode 


Så skal du bare have en opstilling der ser sådan her ud:

menu
-------
id
menu_id
title


children
----------
id
menu_id
title


Noget i den stil. Læs her: inner join



Måske du kan bruge noget i den her stil:
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 09.09.2011 18:22 af Bruger #3427
Fold kodeboks ind/udPHP kode 


Men jeg ville lave det som en inner join så man kunne holde styr på hvilke undermenuer der tilpasser sig den overordnede menu :)

-- God idé med array som står ovenover mit indlæg :)



Indlæg senest redigeret d. 09.09.2011 18:42 af Bruger #16025
Fold kodeboks ind/udPHP kode 


Men jeg ville lave det som en inner join så man kunne holde styr på hvilke undermenuer der tilpasser sig den overordnede menu :)

-- God idé med array som står ovenover mit indlæg :)

Jeg ville lave det rekursiv som nogle af de andre også har gjort. Så er du ikke begrænset af hvor mange while løkker du skriver.



Fik besvaret det forkerte indlæg. Beklager

Formoder det er loop'et der er svært at gennemskue:

Fold kodeboks ind/udPHP kode 


Du kan se i tidl. indlæg hvilket datasæt der skal til for at opbygge struktur.



Indlæg senest redigeret d. 11.11.2014 11:45 af Bruger #10216
t