Avatar billede mini-me Nybegynder
04. juli 2008 - 17:38 Der er 8 kommentarer og
1 løsning

Hjælp til rekursiv funktion

Hej,

Jeg har brugt dette stykke kode : http://www.html.dk/scripts/asp/00015/ i en længere periode.

Mit problem er dette at jeg vil bruge det til et menusystem - men her bruges der ikke numeriske værdier.

Eks.:

1.
ID (GroupingName) = "Sav"
RID (ParentGroupName) = ""

2.
ID (GroupingName) = "Motor"
RID (ParentGroupName) = ""

3.
ID (GroupingName) = "Klinge"
RID (ParentGroupName) = "Sav"
4.
ID (GroupingName) = "Ben"
RID (ParentGroupName) = "Sav"

Skal give følgende struktur

- Sav
-- klinge
-- ben

- Motor

Nogen der kan hjælpe? Jeg kan ikke lige greje hvordan det skal gribes an.
Avatar billede Spotgun Seniormester
04. juli 2008 - 18:00 #1
Det skulle være rimeligt lige til. Du skal blot bruge strenge i stedet for tal.

Function Threads(strID)   
  For m = 1 to Ubound(arrID)
    If Cstr(arrRE(m)) = Cstr(strID) Then
      Threads = Threads & "<ul><li>" & arrSU(m) & Threads(arrID(m)) & "</li></ul>"   
    End If       
Next
End Function

Har ikke testet det, men hvis det er lavet nøjagtigt som eksemplet du linkede til, så vil jeg tro det er det eneste du behøver at rette...

Du skal selvfølgelig også kalde funktionen med en streng, f.eks. Threads("Sav")
Avatar billede mini-me Nybegynder
04. juli 2008 - 18:08 #2
Hvis jeg kalder funktionen med threads("sav") får jeg ikke kun undermenuerne til sav?

ellers skal jeg jo til at lave en loop som kalder threads(groupingName) ?
Avatar billede Spotgun Seniormester
04. juli 2008 - 20:35 #3
Sidstnævnte er vel heller ikke det store problem? Du har vel alle GroupingNames enten i en database eller i et array?
Avatar billede mini-me Nybegynder
04. juli 2008 - 23:05 #4
Korrekt, men det var da nemmere med det andet hvor jeg bare kaldte funktionen en enkelt gang :)
Avatar billede Spotgun Seniormester
04. juli 2008 - 23:16 #5
De ekstra par linier går vel nok ;)

Svar herfra, hvis du kan bruge mit input til noget!
Avatar billede mini-me Nybegynder
04. juli 2008 - 23:20 #6
Får en out of memory... kan ikke lige se jeg har overset noget...

Function menu()   
   
        call openDB(conn)

        mySQL = "Select * from internetgroup where ParentGroup = ''"
        Set rsEntries = conn.execute(mySQL)
       
        if rsEntries.eof or rsEntries.bof then
            ' error handler
            response.Write("alvorlig fejl")
            response.End()
        else    
       
            while not rsEntries.eof or rsEntries.bof
              call printMenu(rsEntries("Grouping"))
            rsEntries.movenext
            wend
        end if
       
        call closeDB(conn)
       
    end function    
   
   
    function PrintMenu(strID)
   
    call openDB(conn)

    mySQL = "Select * from internetgroup"
    Set rsEntries = conn.execute(mySQL)
       
    Do

      ' Gem data som kommasepareret liste
      arrId = arrId & "," & rsEntries("grouping")
      arrTopLevel = arrToplevel & "," & rsEntries("parentGroup")
      arrTitle = arrTitle & "," & replace(rsEntries("name"),"&#187;","'")
   
      rsEntries.MoveNext
      loop while not rsEntries.eof
       
        ' Lav arrays med data
        arrID = Split(arrID,",")
        arrTopLevel = Split(arrTopLevel,",")
        arrTitle = Split(arrTitle,",")
       
      For m = 1 to Ubound(arrID)

        If Cstr(arrTopLevel(m)) = cStr(intID) Then
            PrintMenu = PrintMenu & "<ul><li>" & arrTitle(m) & PrintMenu(arrID(m)) & "</li></ul>"   
        end if    
      Next
     
      response.Write(PrintMenu)
       
    end function
Avatar billede mini-me Nybegynder
04. juli 2008 - 23:26 #7
Nevermind ;-) Overså at jeg blev ved at kalde PrintMenu her:

  PrintMenu = PrintMenu & "<ul><li>" & arrTitle(m) & PrintMenu(arrID(m)) & "</li></ul>"
Avatar billede mini-me Nybegynder
04. juli 2008 - 23:28 #8
For en god ordensskyld, hvis andre skulle få brug for det så virker nedenstående.

Function menu()   
   
        call openDB(conn)

        mySQL = "Select * from internetgroup where not ParentGroup<>''"
        Set rsEntries = conn.execute(mySQL)
       
        if rsEntries.eof or rsEntries.bof then
            ' error handler
            response.Write("alvorlig fejl")
            response.End()
        else    

            while not rsEntries.eof or rsEntries.bof
              response.Write(rsEntries("Grouping") & i & "<br>")
              response.Flush()
              call printMenu(rsEntries("Grouping"))
            rsEntries.movenext
            wend
        end if
       
        call closeDB(conn)
       
    end function    
   
   
    function PrintMenu(strID)
   
    call openDB(conn)

    mySQL = "Select * from internetgroup"
    Set rsEntries = conn.execute(mySQL)
       
    Do

      ' Gem data som kommasepareret liste
      arrId = arrId & "," & rsEntries("grouping")
      arrTopLevel = arrToplevel & "," & rsEntries("parentGroup")
      arrTitle = arrTitle & "," & replace(rsEntries("name"),"&#187;","'")
   
      rsEntries.MoveNext
      loop while not rsEntries.eof
       
        ' Lav arrays med data
        arrID = Split(arrID,",")
        arrTopLevel = Split(arrTopLevel,",")
        arrTitle = Split(arrTitle,",")
       
      For m = 1 to Ubound(arrID)

        If Cstr(arrTopLevel(m)) = cStr(intID) Then

            PrintMenu = PrintMenu & "<ul><li>" & arrTitle(m) &  "</li></ul>"   

        end if    
      Next
     
      response.Write(PrintMenu)
       
    end function
       


call menu()
Avatar billede mini-me Nybegynder
04. juli 2008 - 23:33 #9
Hmm og jeg var for hurtig har dette i db'en

Name = Krydderi mix
GUID = {62DE787C-304F-4F11-9E84-F599D67C242D}
ParentGroup = Krydderier

Grouping = Krydderier
Name = Krydderier
GUID = {840D8544-F22D-47E8-BD9C-2B652F1858C1}
ParentGroup =

Grouping = Nudler
Name = Nudler
GUID = {469A7EDA-8D93-4B62-BD6D-228312B3BC85}
ParentGroup =

Grouping = Smørepålæg
Name = Smørepålæg
GUID = {EF677483-1DDD-4332-A8E3-5D748EA1A1AA}
ParentGroup =




får denne menu ud :

Krydderier
+Krydderier
+Nudler
+Smørepålæg

Nudler
+Krydderier
+Nudler
+Smørepålæg

Smørepålæg
+Krydderier
+Nudler


Det helt galt...
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