22. september 2003 - 14:22Der er
5 kommentarer og 1 løsning
Undermenu problem igen
Jeg har en javascript menu som jeg gerne vil danne vha. asp, men jeg ved ikke lige hvordan jeg skal gøre det. Her er min db struktur:
id navn (tekst) hovedmenu (1=ja 0=nej) subid (0=nej ellers lig med id)
F.eks.
Medlemmer (id=1 subid=0) - Opret (id=2 subid=1) - Vis (id=3 subid=1) Organisation (id=4 subid=0) - Rediger (id=5 subid=4) - Vis (id=6 subid=4)
Det skulle være rigelig forklaring!?! Er der nogen der har nogen ideer til at lave dette. Jeg kan sagtens lave det så den først hiver undermenuerne ud når man trykker på topmenupunktet, men jeg vil hive det hele ud på een gang så jeg kan lave navigeringen client-side!
Jeg har lavet en løsning som måske er lidt langhåret, men den er kanon hurtig, og kræver kun et opslag i DB. 1) lave en select fx: SELECT a.id,a.name,a.parentid,a.pos, count(b.id) as antal FROM menu a LEFT JOIN menu b on a.id = b.parentid GROUP by a.id,a.name,a.parentid,a.pos ORDER BY a.parentid,a.pos
nu har du et recordset der er nogenlunde ordnet, men du vil gerne have dem i den rækkefølge de skal vises
2) smid dem over i et array og lav en sortering fx: orderArray = rsMenuRows.GetRows intSize = Ubound(orderArray,2) redim resultArray(intSize) intCounter = 0 call OrderTest(0) call WriteList()
sub OrderTest(parent) dim i for i = 0 to UBound(orderArray,2) 'er det et child til den parent vi er ved nu? if orderArray (2,i) = parent then resultArray(intCounter) = i intCounter = intCounter + 1 call OrderTest(orderArray (0,i)) end if next end sub
læg mærke til at OrderTest er en rekursiv sub, så den bliver ved med at kalde sig selv til du er nået igennem arrayet og du har den rigtige rækkefølge i resultArray.
3) Du skal nu have skrevet dem ud derfor kalder du sub writeList() sub WriteList() for i = 1 to UBound(resultArray) if orderArray (2,resultArray(i)) = 0 then response.write "NyKat('" & orderArray (0,resultArray(i)) & "','" & orderArray (1,resultArray(i)) & "',false,'url');" else response.write "NyKatLink('" & orderArray (2,resultArray(i)) & "','" & orderArray (1,resultArray(i)) & "',false,'url');" end if next end sub
Jeg har skrevet writelist om til dig, jeg kan se at du kun har to niveauer, ellers kan orderTest bruges til n-niveauer, den skal man bare tage højde for i writeList, men så bliver det lidt mere indviklet.
stay cool
KeRs
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.