Avatar billede reino Nybegynder
03. marts 2010 - 07:09 Der er 2 kommentarer og
1 løsning

Rekursiv menu, array

Hejsa

Har strugglet med dette en del tid, jeg skal have lavet et udtræk fra en database, access, i asp. Jeg faldt over et svar eagleeye har lavet for nogle år siden (http://www.eksperten.dk/spm/532172)  og har prøve at modde det lidt, men kan ikke lige få det helt til at spille.

Koden som jeg har ændret det til:

<%
' Database forbindelse
Set Rs = Server.Createobject("ADODB.Connection")   
Rs.Open "DRIVER={Microsoft Access Driver (*.mdb)}; dbq=sti;"
 
' Hent data fra databasen
Set rsEntries = Rs.Execute("Select * from tabel")

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("parent")
  arrSU = arrSU & "," & rsEntries("titel")
  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,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="<li><a href=""/"">"
        if startSubMenu=true then
        strEnd="</a>"
      else
          strEnd="</a></li>"
      end if
        if startSubMenu=true then
          str = "<ul>" & str
          startSubMenu=false
        end if
      elseif startSubMenu=false then
        str="<ul><a href=""/"">"
        strEnd=""
        startSubMenu=true
      else 
        str=""
        strEnd=""
      end if
      Threads = Threads & str & arrSU(m) & strEnd & "" & Threads(arrID(m),startSubMenu)
      if m=Ubound(arrID) and arrRE(m)>0 then Threads=Threads&"</a></ul>"
    End If
  Next
End Function

' Kald funktionen med alle hovedindlæg
str = Threads(0,false)
if right(str,6) <> "</ul>" then str = str & "</li>"
Response.Write (str)
%>

Outputtet som jeg gerne vil have det til at være
                                    <li><a href="#">Profile</a></li>
                                    <li><a href="#">Home page</a>
                                        <ul>
                                            <li><a href="index.html">Home 1</a></li>
                                            <li><a href="index-2.html">Home 2</a></li>
                                            <li><a href="index-3.html">Home 3</a></li>
                                        </ul>
                                    </li>

Ville være super hvis nogle kunne hjælpe her, da jeg er ved at få grå hår af dette. Arrays er ikke min stærkeste side :)
Avatar billede keysersoze Guru
03. marts 2010 - 07:30 #1
prøv at fortæl hvilke fejl du får.
Avatar billede reino Nybegynder
03. marts 2010 - 08:02 #2
Jeg får ikke en decideret fejl, det er blot outputtet som ikke er korrekt jvnfr. nedenstående:

<li><a href="/">Moduler</a></li>
<li><a href="/">Profil</a></li>
<ul><a href="/">test<ul>
<li><a href="/">Kontakt</a></li>

Det korrekte skulle helst være:

<li><a href="/">Moduler</a></li>
<li><a href="/">Profil</a>
<ul><a href="/">test</a></ul>
</li>
<li><a href="/">Kontakt</a></li>

Moduler , profil og kontakt er hovedpunkter, test er underpunkt til profil

Håber dette giver mening :)
Avatar billede reino Nybegynder
10. april 2010 - 08:36 #3
Lukker og slukker :P
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