Avatar billede Slettet bruger
12. august 2002 - 21:39 Der er 2 kommentarer og
1 løsning

Hjælp til tree menu i ASP, jeg er ved at blive gal!

Hej!

Jeg har en fin lille menu med nogle mapper, der normalt laves i hånden, og skrives ind i et JavaScript.

Men jeg vil gerne have det fra min database.

Den indeholder f.eks. følgende:

id        serial          beskrivelse

1        001              Mappe1
2        002              Mappe2
3        002001          Undermappe1 til mappe2
4        002002          Undermappe2 til mappe2
5        002002001        Undermappe1 til undermappe2

osv, osv...

Mappernes niveau bestemmes altså af serial nummeret.

Dette vil jeg gerne have automatiseret, så det stilles op på følgende måde:

foldersTree = gFld("<b>Produkter</b>", "")
    mappe1 = insFld(foldersTree, gFld("Mappe1"))

    mappe2 = insFld(foldersTree, gFld("Mappe2"))
        undermappe1 = insFld(mappe2, gFld("Undermappe1"))
        undermappe2 = insFld(mappe2, gFld("Undermappe2"))
            insDoc(undermappe2, gLnk("S", "Undermappe til undermappe2"))

Her er det værd at bemærke at mapper uden undermapper kaldes for insDoc, og mapper med undermapper kaldes for insFld

Jeg har forsøgt og forsøgt, men kører sur i det.

Nogen der kan hjælpe?

Jeg har fundet frem til at man skal ORDER BY serial, trække det hele ud som et array og løbe det igennem.

Men.... :(
Avatar billede flax Nybegynder
12. august 2002 - 21:42 #1
Jeg kigger lige med, fed ide ellers! :-)
Avatar billede Slettet bruger
12. august 2002 - 22:57 #2
Jeg fandt frem til dette her:

<%

strQuery = "SELECT COUNT(*) AS antal_poster FROM varegrupper"
Set RS = Myconn.Execute(strQuery)
i = 0
i2 = 0

antal_poster = Cint(RS("antal_poster"))

Dim arr_id()
redim preserve arr_id(antal_poster)
Dim arr_serial()
redim preserve arr_serial(antal_poster)
Dim arr_serial2()
redim preserve arr_serial2(antal_poster)
Dim arr_overskrift()
redim preserve arr_overskrift(antal_poster)

strQuery = "SELECT * FROM varegrupper ORDER BY serial"
Set RS = Myconn.Execute(strQuery)
do while not RS.eof

arr_id(i) = RS("id")
arr_serial(i) = RS("serial")
arr_serial2(i2) = RS("serial")
arr_overskrift(i) = RS("overskrift")

i = i + 1
i2 = i2 + 1
RS.movenext
loop
Myconn.Execute(strQuery)

For i = LBound(arr_id) to UBound(arr_id)
array1 = array1 & arr_serial(i)& ","
Next

For i2 = LBound(arr_id)+1 to UBound(arr_id)
array2 = array2 & arr_serial2(i2)& ","
Next

array2 = array2 & ","

array1 = replace(array1,",,","")
array2 = replace(array2,",,","")

array3 = Split(array1, ",")
array4 = Split(array2, ",")

response.write "foldersTree = gFld(""<b>Produkter</b>"", """")" & vbCrLf

For i = LBound(array3) to UBound(array3)
If Len(array3(i)) + 3 = Len(array4(i)) OR Len(array3(i)) = 3 Then
response.write "Mappe" & i & " = insFld(foldersTree, gFld("""& arr_overskrift(i) & """, ""url.asp?serial=" & arr_serial(i) & """))" & vbCrLf
Else
response.write vbTab & "Mappe" & i & " = insDoc(Mappe" & i-1 & ", gFld("""& arr_overskrift(i) & """, ""url.asp?serial=" & arr_serial(i) & """))" & vbCrLf
End If
Next

%>

Og det fungerer faktisk fint. Også rimelig kort kode, jeg ser ikke ret meget unødvendig slamkdning (i mine øjne) ;)
Avatar billede Slettet bruger
13. august 2002 - 08:16 #3
Selvfølgelig var det ikke helt så nemt som jeg troede...klokken 3 i nat fik jeg dog fusket dette færdigt, der er eb del grimmere at se på *G*

<%

strQuery = "SELECT COUNT(*) AS antal_poster FROM varegrupper"
Set RS = Myconn.Execute(strQuery)
i = 0
i2 = 0

antal_poster = Cint(RS("antal_poster"))

Dim arr_udskriv()
redim preserve arr_udskriv(antal_poster)

Dim arr_udskriv2()
redim preserve arr_udskriv2(antal_poster)

Dim arr_udskriv3()

redim preserve arr_udskriv3(antal_poster)
arr_udskriv3(i) = ""
Dim arr_id()
redim preserve arr_id(antal_poster)
Dim arr_serial()
redim preserve arr_serial(antal_poster)
Dim arr_serial2()
redim preserve arr_serial2(antal_poster)
Dim arr_overskrift()
redim preserve arr_overskrift(antal_poster)




strQuery = "SELECT * FROM varegrupper ORDER BY serial"
Set RS = Myconn.Execute(strQuery)
do while not RS.eof

arr_id(i) = RS("id")
arr_serial(i) = RS("serial")
arr_serial2(i2) = RS("serial")
arr_overskrift(i) = RS("overskrift")

i = i + 1
i2 = i2 + 1
RS.movenext
loop
Myconn.Execute(strQuery)

For i = LBound(arr_id) to UBound(arr_id)
array1 = array1 & arr_serial(i)& ","
Next

For i2 = LBound(arr_id)+1 to UBound(arr_id)
array2 = array2 & arr_serial2(i2)& ","
Next

array2 = array2 & ","

array1 = replace(array1,",,","")
array2 = replace(array2,",,","")

array3 = Split(array1, ",")
array4 = Split(array2, ",")

response.write "foldersTree = gFld(""<b>Produkter</b>"", """")" & vbCrLf

For i = LBound(array3) to UBound(array3)

If Len(array3(i)) = 3 Then
temp_var = i

arr_udskriv3(i) = arr_serial(i)
arr_udskriv2(i) = i+1
arr_udskriv(i) = "Mappe" & i+1 & " = insFld(foldersTree, gFld("""& arr_overskrift(i) & """, ""index.asp?serial=" & arr_serial(i) & "&valg=varegruppe""))" & vbCrLf
Else If Len(array3(i)) + 3 = Len(array4(i)) Then
temp_var = i

'fjern 3 bagerste tegn fra serial, find det serial som er magen til, og udskriv dettes array nummer.

temp_serial = Left(arr_serial(i),Len(arr_serial(i))-3)


arr_udskriv3(i) = arr_serial(i)
arr_udskriv2(i) = i+1
arr_udskriv(i) = "Mappe" & i+1 & " = insFld(Mappe" & i & ", gFld("""& arr_overskrift(i) & """, ""index.asp?serial=" & arr_serial(i) & "&valg=varegruppe""))" & vbCrLf
Else If Len(array3(i-1)) = Len(array4(i-1)) OR Len(array3(i-1)) = 3 Then
i3 = temp_var + 1
Else
i3 = i
End If

arr_udskriv3(i) = arr_serial(i)
arr_udskriv2(i) = i+1
arr_udskriv(i) = "Mappe" & i+1 & " = insDoc(Mappe" & i3 & ", gFld("""& arr_overskrift(i) & """, ""index.asp?serial=" & arr_serial(i) & "&valg=varegruppe""))" & vbCrLf
End If
End If

Next


For n = LBound(arr_udskriv) to UBound(arr_udskriv)

If Len(arr_udskriv3(n)) >= 3 Then

temp_serial = Left(arr_udskriv3(n),Len(arr_udskriv3(n))-3)

For t = LBound(arr_udskriv) to UBound(arr_udskriv)-1

If temp_serial = arr_udskriv3(t) Then

replace_var1 = "insDoc(Mappe" & n & ","
replace_var2 = "insDoc(Mappe" & t+1 & ","

replace_var1 = "insFld(Mappe" & n & ","
replace_var2 = "insFld(Mappe" & t+1 & ","

arr_udskriv(n) = replace(arr_udskriv(n), replace_var1, replace_var2)
End If

Next

End If


response.write arr_udskriv(n)




Next

%>
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