Avatar billede nythjem Nybegynder
23. august 2004 - 15:46 Der er 4 kommentarer og
1 løsning

Rekursivt udtræk

Hej Alle!

Jeg er i gang med, at lave en menu hvor jeg skal have lavet nogle divs omkring "hoved links" og "under links". Jeg har fundet en udemærket rekursiv funktion, men jeg kan ikke helt finde ud af den.

Det jeg skal have ind i udtrækket er følgende.

<div id="hoved">Forsiden</div>

<div id="under">
Under link
Under link 2
</div>

<div id="hoved">Produkter</div>

<div id="under">
Lamper
Lampe 1
Lampe 2
Lampe 3
</div>

Jeg trækker tre post ud. ID, RELA, LINK.

Hvis Rela = 0, så er udtrækket et hoved link.
Hvis Rela > 0, så er udtrækket et under link.


Hvordan løses den? På forhånd tak! :)

****** SCRIPT ******

<%
' Database forbindelse
Set Rs = Server.Createobject("ADODB.Connection")   
Rs.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("../database/database.mdb")& ";"

' Hent data fra databasen
Set rsEntries = Rs.Execute("Select * from menuopsaetning")

If rsEntries.eof then
  Response.Write "<font color=red>Der blev ikke fundet nogle poster i databasen, der modsvarede din forespørgsel!</font>"
  arrID = Split("",",")
  arrRE = Split("",",")
  arrSU = Split("",",")
else

Do
  ' Gem data som kommasepareret liste
  arrID = arrID & "," & rsEntries("ID")
  arrRE = arrRE & "," & rsEntries("RELA")
  arrSU = arrSU & "," & rsEntries("LINK")
  rsEntries.MoveNext
Loop while not rsEntries.eof

' Lav arrays med data
arrID = Split(arrID,",")
arrRE = Split(arrRE,",")
arrSU = Split(arrSU,",")

Rs.Close
End If

' Funktion som undersøger for svar
Function Threads(intID)   
  For m = 1 to Ubound(arrID)
    ' Hvis svar til det indlæg som funktionen er kaldt med
    If Cint(arrRE(m)) = Cint(intID) Then
      Threads = Threads & arrSU(m) & "<br>" & Threads(arrID(m)) & ""   
    End If   
Next
End Function
Response.Write Threads(0)
%>
Avatar billede eagleeye Praktikant
23. august 2004 - 19:48 #1
Har du mere end 2 levels i menuen?

Må det evt. laves som:

<div id="hoved">Forsiden</div>

<div id="under">Under link</div>
<div id="unser">Under link 2</div>
Avatar billede nythjem Nybegynder
23. august 2004 - 20:05 #2
Hej Eagleeye!

Nej jeg har kun to levels. Men under linkene skal trækkes ud sammen, altså i samme div, hvis du kan klare den :)
Avatar billede eagleeye Praktikant
23. august 2004 - 20:58 #3
Du kan prøve at lave funktionen noget om:


' Funktion som undersøger for svar
Function Threads(intID,startSubMenu)
  For m = 1 to Ubound(arrID)
    ' Hvis svar til det indlæg som funktionen er kaldt med
    If Cint(arrRE(m)) = Cint(intID) Then
      ' Tilføj til liste og kald funktionen for at undersøge for svar
      if arrRE(m)=0 then
        str="<div id=""hoved"">"
        strEnd="</div>"
        if startSubMenu=true then
          str = "</div>" & str
          startSubMenu=false
        end if
      elseif startSubMenu=false then
        str="<div id=""under"">"
        strEnd=""
        startSubMenu=true
      else
        str=""
        strEnd=""
      end if
      Threads = Threads & str & arrSU(m) & strEnd & "<br>" & Threads(arrID(m),startSubMenu)
      if m=Ubound(arrID) and arrRE(m)>0 then Threads=Threads&"</div>"
    End If
  Next
End Function

' Kald funktionen med alle hovedindlæg
str = Threads(0,false)
if right(str,6) <> "</div>" then str = str & "</div>"
Response.Write (str)
Avatar billede nythjem Nybegynder
23. august 2004 - 21:02 #4
God save the queen Eagleeye, den er jo lige i øjet!

Tusinde tak skal du have :)
Avatar billede eagleeye Praktikant
23. august 2004 - 21:16 #5
Det lyder godt :)
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