Avatar billede tblaster Nybegynder
10. juni 2003 - 11:43 Der er 4 kommentarer og
1 løsning

Menu bygget op som træ struktur

Jeg er ved at lave et menu system som er bygget op som en træ stryktur. Den skal hente informationerne som den skal bruge fra en mysql database som er opbygget på følgende måde:

Id:      Parentid:      Navn:                          Prioritet:    Aktiv:
1        0              kategori1                              0        1
2        1              underkategori1 til kategori1            1        1
3        1              underkategori2 til kategori1            1        1
4        0              kategori2                              1        1
5        4              underkategori3 til kategori2            1        1
6        5              underunderkategori1 til knderkategori3  1        1


Dette skal så gerne skrives ud således i min menu:

kategori1
    underkategori1
    underkategori2
kategori2
    underkategori3
          underunderkategori1

Koden som jeg har pt. skriver det ud som overstående men laver en enkelt fejl og det er når man trykker på en "underunderkategori" altså en niveu 3 kategori for så lukkes hele menuen.

I kan se hvordan menuen virker lige nu og hvordan det er den lukker menuen her:

http://www.just2funny.dk/1/index.asp?Size=&parentid=13&Kategorie=16&Forside=16

Bare tryk på en af de kategorier der står under Blondiner!

Jeg håber der er en der hurtigt kan hjælpe mig med at fikse denne lille fejl. Skal jeg ændre i min sql databases opsætning så gør det ikke noget!

Her er så min kode:
____________________________________________________________

Dim kID
Dim ukID
Dim parentID

parentID = session("parentID")

Sub RtrnKat(pid)
  Dim rs
  Dim rs_sql
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs_sql = "SELECT * FROM Kategorier WHERE ParentID = " & pid & " Order By Prioritet asc, Navn asc"
  rs.Open rs_sql, Conn, 1, 1
  Do While Not rs.EOF
      If rs("parentID") = 0 Then kID = rs("parentID")
     
        Response.Write "<tr>" & _
                      "<TD width=18 height=15></TD>" & _
                      "<TD width=10 height=15>"
             
        If CInt(session("Kategorie")) = CInt(rs("Id")) Then
        Response.Write "<IMG height=5 src=""Pics/firkant_fyld.gif"" width=5></TD>"& _
                      "<TD bgColor=#dfebc8 height=15><B>"
        Else
        Response.Write "</TD>" & _
                        "<TD height=15><B>"
        End If

        If rs("Nr") = 1 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs("parentID") & "&Kategorie=" & rs("Id") & "&Forside=" & rs("Id") &""">" & rs("Navn")
        End If
        If rs("Nr") = 2 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs("parentID") & "&Kategorie=" & rs("Id") & "&Forside=" & rs("Id") &""">" & "&nbsp;&nbsp;" & rs("Navn")
        End If
        If rs("Nr") = 3 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs("parentID") & "&Kategorie=" & rs("Id") & "&Forside=" & rs("Id") &""">" & "&nbsp;&nbsp;&nbsp;&nbsp;" & rs("Navn")
        End If
       
        Response.Write "</A></B></TD>" & _
                      "</tr>"
      If CInt(Session("Kategorie")) = CInt(rs("ID")) Then RtrnKat(rs("ID"))
      If CInt(parentID) = CInt(rs("ID")) Then RtrnKat(rs("id"))
      'If CInt(kID) = rs("") Then RtrnKat(rs("ID"))
      rs.MoveNext
  Loop
 
  rs.Close
  Set rs = Nothing
End Sub

Call RtrnKat(0)

____________________________________________________________
Avatar billede rako Nybegynder
16. juli 2003 - 12:45 #1
Hvorfor henter du både "kategorie" og "Forside" fra rs("ID") skulle de ikke hentes fra to forskellige kolonner i din database...

Hvis man manuelt går ind og ændrer den sidst variable (Forside) i browserens URL line (jeg skrev: http://www.just2funny.dk/1/index.asp?Size=&parentid=13&Kategorie=16&Forside=14), så får man faktisk noget der ligner det du søger...

Håber det kan hjælpe dig lidt på vej.

Mvh,
Rasmus
Avatar billede tblaster Nybegynder
28. juli 2003 - 15:46 #2
Jeg tror ikke ud har forstået problemet ... jeg ved godt at forsiden som høre til min kategori 16 lige nu har id 14 men det er fordi jeg har slettet i nogle af dem og ændret deres værdier.

Det er ikke mit problem. Mit problem er at hvis man trykker på en underkategori til blondiner, eks Andre så lukkes hele menuen. Hvorfor sker dette og hvad skal jeg gøre for at undgå dette?
Avatar billede tblaster Nybegynder
29. juli 2003 - 10:52 #3
Har lavet et lille trick nu:

Følgende er ændret:
        If rs("Nr") = 3 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&nr=" & rs("nr") & "&parentid=" & rs("parentID") & "&Kategorie=" & rs("Id") & "&Forside=" & rs("Id") &""">" & "&nbsp;&nbsp;&nbsp;&nbsp;" & rs("Navn")
        End If

Og derudover så har jeg ændret så jeg nu har følgende:
If request.querystring("nr") <> 3 Then
If request.querystring("parentID") <> "" Then
  session("parentID") = request.querystring("parentID")
Else if request.querystring("nr") <> 3 and request.querystring("parentID") = "" Then
  session("parentID") = "0"
End If
End If
End If

Dermed lukker hele menuen ikke når jeg trykker på en undermenu til blondiner. Det er kun menuen op til blondiner der lukker. Men den skal jo stadig ikke lukke men forblive åben og så skal undermenuen jo være markeret så man kan se det er den man har trykket på!
Avatar billede tblaster Nybegynder
29. juli 2003 - 11:30 #4
Jeg fandt en måde at få det til at virke på men de 3 niveauer. Men det er sku noget af en grim måde at fikse det på så jeg vil gerne give nogle point til den der kan samle koden og gøre den lidt mindre og pæn!

<%
If request.querystring("Kategorie") <> "" Then
  session("Kategorie") = request.querystring("Kategorie")
Else
  session("Kategorie") = "1"
End If

If request.querystring("Forside") <> "" Then
  session("Forside") = request.querystring("Forside")
Else
  session("Forside") = "1"
End If

If request.querystring("nr") <> 3 Then
If request.querystring("parentID") <> "" Then
  session("parentID") = request.querystring("parentID")
Else if request.querystring("nr") <> 3 and request.querystring("parentID") = "" Then
  session("parentID") = "0"
End If
End If
End If

session("parentID2") = request.querystring("parentID")

If request.querystring("Funktion") <> "" Then
  session("Funktion") = request.querystring("Funktion")
Else
  session("Funktion") = "Forside"
End If
%>

<%
If request.querystring("nr") <> 3 Then
'Åbn forbindelse til databasen
set conn = server.createobject("ADODB.connection")
conn.open "Driver={mysql};Server=ip;Database=navn;UID=brugernavn;PWD=kode;"

Dim kID
Dim ukID
Dim parentID

Sub RtrnKat(pid)
  Dim rs
  Dim rs_sql
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs_sql = "SELECT * FROM Kategorier WHERE ParentID = " & pid & " Order By Prioritet asc, Navn asc"
  rs.Open rs_sql, Conn, 1, 1
  Do While Not rs.EOF
      If rs("parentID") = 0 Then kID = rs("parentID")
     
        Response.Write "<tr>" & _
                      "<TD width=18 height=15></TD>" & _
                      "<TD width=10 height=15>"
             
        If CInt(session("Kategorie")) = CInt(rs("Id")) Then
        Response.Write "<IMG height=5 src=""Pics/firkant_fyld.gif"" width=5></TD>"& _
                      "<TD bgColor=#dfebc8 height=15><B>"
        Else
        Response.Write "</TD>" & _
                        "<TD height=15><B>"
        End If

        If rs("Nr") = 1 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs("parentID") & "&Kategorie=" & rs("Id") & "&Forside=" & rs("Id") &""">" & rs("Navn")
        End If
        If rs("Nr") = 2 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs("parentID") & "&Kategorie=" & rs("Id") & "&Forside=" & rs("Id") &""">" & "&nbsp;&nbsp;" & rs("Navn")
        End If
        If rs("Nr") = 3 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&nr=" & rs("nr") & "&parentid=" & rs("parentID") & "&Kategorie=" & rs("Id") & "&Forside=" & rs("Id") &""">" & "&nbsp;&nbsp;&nbsp;&nbsp;" & rs("Navn")
        End If
       
        Response.Write "</A></B></TD>" & _
                      "</tr>"
      If CInt(Session("Kategorie")) = CInt(rs("ID")) Then RtrnKat(rs("ID"))
      If CInt(session("parentID")) = CInt(rs("ID")) Then RtrnKat(rs("id"))
      rs.MoveNext
  Loop
 
  rs.Close
  Set rs = Nothing
End Sub

Call RtrnKat(0)

conn.close
set conn=Nothing
End If
%>

<%
If request.querystring("nr") = 3 Then
'Åbn forbindelse til databasen
set conn = server.createobject("ADODB.connection")
conn.open "Driver={mysql};Server=ip;Database=navn;UID=brugernavn;PWD=kode;"

Sub RtrnKat(pid)
  Dim rs1
  Dim rssql
  Set rs1 = Server.CreateObject("ADODB.Recordset")
  rssql = "SELECT * FROM Kategorier WHERE ParentID = " & pid & " Order By Prioritet asc, Navn asc"
  rs1.Open rssql, Conn, 1, 1
  Do While Not rs1.EOF
      If rs1("parentID") = 0 Then kID = rs1("parentID")
     
        Response.Write "<tr>" & _
                      "<TD width=18 height=15></TD>" & _
                      "<TD width=10 height=15>"
             
        If CInt(session("Kategorie")) = CInt(rs1("Id")) Then
        Response.Write "<IMG height=5 src=""Pics/firkant_fyld.gif"" width=5></TD>"& _
                      "<TD bgColor=#dfebc8 height=15><B>"
        Else
        Response.Write "</TD>" & _
                        "<TD height=15><B>"
        End If

        If rs1("Nr") = 1 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs1("parentID") & "&Kategorie=" & rs1("Id") & "&Forside=" & rs1("Id") &""">" & rs1("Navn")
        End If
        If rs1("Nr") = 2 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs1("parentID") & "&Kategorie=" & rs1("Id") & "&Forside=" & rs1("Id") &""">" & "&nbsp;&nbsp;" & rs1("Navn")
        End If
        If rs1("Nr") = 3 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&nr=" & rs1("nr") & "&parentid=" & rs1("parentID") & "&Kategorie=" & rs1("Id") & "&Forside=" & rs1("Id") &""">" & "&nbsp;&nbsp;&nbsp;&nbsp;" & rs1("Navn")
        End If
       
        Response.Write "</A></B></TD>" & _
                      "</tr>"
      If CInt(Session("Kategorie")) = CInt(rs1("ID")) Then RtrnKat(rs1("ID"))
      If CInt(session("parentID")) = CInt(rs1("ID")) Then RtrnKat(rs1("id"))
      rs1.MoveNext
  Loop
 
  rs1.Close
  Set rs1 = Nothing
End Sub

Call RtrnKat(0)

conn.close
set conn=Nothing


'Åbn forbindelse til databasen
set conn2 = server.createobject("ADODB.connection")
conn2.open "Driver={mysql};Server=ip;Database=navn;UID=brugernavn;PWD=kode;"

  Dim rs2
  Dim rssq2
  Set rs2 = Server.CreateObject("ADODB.Recordset")
  rssql2 = "SELECT * FROM Kategorier WHERE ParentID = " & session("parentID2") & " Order By Prioritet asc, Navn asc"
  rs2.Open rssql2, Conn2, 1, 1
  Do While Not rs2.EOF
     
        Response.Write "<tr>" & _
                      "<TD width=18 height=15></TD>" & _
                      "<TD width=10 height=15>"
             
        If CInt(session("Kategorie")) = CInt(rs2("Id")) Then
        Response.Write "<IMG height=5 src=""Pics/firkant_fyld.gif"" width=5></TD>"& _
                      "<TD bgColor=#dfebc8 height=15><B>"
        Else
        Response.Write "</TD>" & _
                        "<TD height=15><B>"
        End If

        If rs2("Nr") = 1 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs2("parentID") & "&Kategorie=" & rs2("Id") & "&Forside=" & rs2("Id") &""">" & rs2("Navn")
        End If
        If rs2("Nr") = 2 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&parentid=" & rs2("parentID") & "&Kategorie=" & rs2("Id") & "&Forside=" & rs2("Id") &""">" & "&nbsp;&nbsp;" & rs2("Navn")
        End If
        If rs2("Nr") = 3 Then
        Response.Write "<A href=""index.asp?Size=" & session("Sizex") & "&nr=" & rs2("nr") & "&parentid=" & rs2("parentID") & "&Kategorie=" & rs2("Id") & "&Forside=" & rs2("Id") &""">" & "&nbsp;&nbsp;&nbsp;&nbsp;" & rs2("Navn")
        End If
       
        Response.Write "</A></B></TD>" & _
                      "</tr>"
      rs2.MoveNext
  Loop
 
  rs2.Close
  Set rs2 = Nothing

conn2.close
set conn2=Nothing
End If
%>
Avatar billede tblaster Nybegynder
22. september 2003 - 11:56 #5
lukker
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