Avatar billede dabster Nybegynder
04. november 2001 - 12:47 Der er 12 kommentarer og
1 løsning

Heirarkisk menu

Jeg forsøger at lave en dhtml dropdown menu, med et uendeligt antal underpunkter:
home
  menu1
    menu11
    menu12
  menu2
    menu21
      menu211
      menu212
  menu3

Menupunkterne har jeg lavet i en MySQL-database med følgende indeksering:
0:ID(int) - recordens ID
1:ParentID(int) - Hvad er menupunktets placering
2:Name(char) - Menupunktets navn
3:Sort(int) - Sortering af menupunkterne på denne gren

Jeg har lavet nedenstående kode, der henter en funktion, hver gang der kommer en \"child\" til et punkt. Denne henter også sig selv i tilfælde af et underpunkt til et underpunkt.

Det virker dog ikke, da funktionen aldrig vender tilbage til sig selv, men springer ud i hovedprogrammet, og derfor ikke afslutter en gren.

Jeg håber der er nogen der kan hjælpe, også hvis der er en nemmere måde.

På forhånd tak

SQL = \"SELECT *  FROM treeview  ORDER BY ParentID ASC, Sort ASC\"
<%
homeID = avarFields(0,0)
MenuNr = 0
For P1 = 1 to Ubound(avarFields, 2)
    If avarFields(1,P1) = homeID Then
        MenuNr = MenuNr +1
        intCount = arrayCount(P1+1)
        If intCount = \"\" Then intCount = 0
        endTag = \"\"
        If MenuNr = 1 Then endTag = \",20,150\"
        Response.Write(\"Menu\"&MenuNr&\"=new Array(\"&Chr(34)&avarFields(2,P1)&Chr(34)&\",\"&Chr(34)&\"#\"&Chr(34)&\",\"&intCount & endTag&\");\"&chr(10)&chr(13))
        strMenuNr = \"\" & MenuNr
        If arrayCount(P1) <> \"\" Then
            Response.Write(Child(avarFields(0,P1),strMenuNr))
        End If
    End If
Next
%>
<%
Private Function Child(ParentID,strMenuNr)
    Dim ChildMenuNr, intCount, strTempMenuNr, ChildMenu, endTag, ChildTemp
    ChildMenuNr = 0
    ChildTemp = \"\"
    For P2 = 1 to Ubound(avarFields, 2)
        If avarFields(1,P2) = ParentID Then
            intCount = arrayCount(P2+1)
            If intCount = \"\" Then intCount = 0
            ChildMenuNr = ChildMenuNr +1
            strTempMenuNr = strMenuNr&\"_\"&ChildMenuNr
            endTag = \"\"
            If ChildMenuNr = 1 Then endTag = \",20,150\"
            ChildTemp = ChildTemp + (\"Menu\"&strTempMenuNr&\"=new Array(\"&Chr(34)&avarFields(2,P2)&Chr(34)&\",\"&Chr(34)&\"#\"&Chr(34)&\",\"&intCount & endTag&\");\"&chr(10)&chr(13))
            If arrayCount(P2+1) <> \"\" Then
                ChildTemp = ChildTemp + Child(avarFields(0,P2),strTempMenuNr)
            End If
        End If
    Next
    Child = ChildTemp
End Function
%>
Avatar billede wired Nybegynder
04. november 2001 - 12:55 #1
Lyder yderst interessant - er det muligt at få en kopi når du får det til at virke?
Avatar billede dabster Nybegynder
04. november 2001 - 13:02 #2
Hvis det var ment på en pæn måde, så ja naturligvis.
Avatar billede wired Nybegynder
04. november 2001 - 13:07 #3
Selvfølgelig er det pænt ment. Har selv arbejdet lidt med det da jeg begyndte på dhtml. Men sjovt(nemmeste) ville det være at kombinere det med asp og en database.
Avatar billede wired Nybegynder
04. november 2001 - 13:15 #4
Måske denne side kan give nogle ideer!
http://www.simplythebest.net/info/dhtml_menus.html
Avatar billede dabster Nybegynder
04. november 2001 - 13:19 #5
Tak, men selve DHTML\'en er sådan set på plads, jeg kan bare ikke hente menu-data på en hierarkisk måde via ASP.
Avatar billede wired Nybegynder
04. november 2001 - 13:30 #6
Dette er iøvrigt også et godt udkast til nogle færdige eks.
http://www.coalesys.com/products/webmenuasp/samples/default.asp
Avatar billede wired Nybegynder
04. november 2001 - 13:31 #7
Oh.. Fik lige din anden besked. Okay jeg holder inde og venter spændt :-)
Avatar billede sth Novice
04. november 2001 - 13:36 #8
jeg bruger denne, den køre dog på en access db, men det kunne jo nemt laves om
du kan hende den her: http://www.halstat.dk/menu/menu.zip
Avatar billede netsrac Praktikant
04. november 2001 - 14:33 #9
De øverste punkter i hieratiet hvilket parentid har de ?
Avatar billede netsrac Praktikant
04. november 2001 - 14:37 #10
Hvis vi antager at de øverste punkter har parentid 0 ville jeg gøre det sådan her:

Sub Tree(id, spacer)
  set rs = Conn.execute(\"SELECT *  FROM treeview  where ParetnID = \" & id & \" ORDER BY sort ASC\")
  Do until rs.eof
      For i = 1 to spacer
        Response.write(\"&nbsp;\")
      Next
      Response.write(rs(\"name\"))
      Call Tree(rs(\"id\"), spacer + 1)
  rs.movenext
  Loop
  Set rs = nothing
End Sub

Call Tree(0,0)
Avatar billede dabster Nybegynder
04. november 2001 - 19:32 #11
Tusind tak, det virker perfekt!!!!
Avatar billede netsrac Praktikant
04. november 2001 - 19:46 #12
Så lidt :)
Avatar billede boleole Nybegynder
20. oktober 2005 - 00:54 #13
Takker! Det virker stadigvæk perfekt!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester