Avatar billede tblaster Nybegynder
28. juli 2003 - 16:19 Der er 14 kommentarer og
2 løsninger

Menu opbygget i træstruktur, menupunkter skal hentes fra db

Jeg har bøvlet med dette så længe nu, så nu prøver jeg helt forfra og håber på at få hjælp til at få det kørende.

Hvis du mener at kunne hjælpe mig der hvor jeg er gået fast er du velkommen til at give mig en hånd her:
http://www.eksperten.dk/spm/362868

Ellers så læs dette:

Som titlen siger skal jeg have lavet en menu opbygget i træstruktur der heter menupunkterne fra en database. Menuen skal kunne udskrive underpunkter til menupunkterner altså noget lig med dette:

kategori1
    underkategori1
    underkategori2
kategori2
    underkategori3
          underunderkategori1

Som udgangspunkt bliver det en mysql database så vi starter med følgende:

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

Tabellen hvor informationerne skal hentes fra skal gerne hedde: Kategorier

Databasen skal styre om underkategori1 høre til kategori1 eller 2. Hvordan database skal bygges op er overladt til jer sålænge at alle kategorierne ligger i samme tabel.

Det skal gerne være så det menupunkt man har trykket på og dermed åbnet er markeret med en farve.
Avatar billede hnteknik Novice
28. juli 2003 - 18:57 #1
Jeg har lavet en indlæsningsrutine til access/MySQL der fodrer coolmenues fra
http://www.dhtmlcentral.com/

Er det sådan noget, deu er interesseret i ???
Henrik
Avatar billede tblaster Nybegynder
28. juli 2003 - 19:17 #2
Nej ... jeg skal slet ikke have nogle advanceret menuer ... menupunkterne skal skrives i simpel tekst som i eksmplet i overstående.
Avatar billede hnteknik Novice
28. juli 2003 - 19:23 #3
SELECT tblMenu.menuID, tblMenu.mName, tblMenu.mLink, tblMenu.parent
FROM tblMenu
ORDER BY tblMenu.parent, tblMenu.menuID;

Avanceret eller ej, så er tabellen enkelt
Avatar billede tblaster Nybegynder
28. juli 2003 - 19:27 #4
Det skal jo udskrives så kun hvis man har trykket på kategori 2 så udskrives dens underkategorier! Det er jo en træstruktur der skal bygges op ...
Avatar billede jnissen Nybegynder
28. juli 2003 - 22:40 #5
Jeg bruger selv denne, som virker ganske godt.

Selve menuen ligger i en tabel som hedder "kategori". Alle undermenuerne ligger i "Submenu". I den har jeg så et felt som hedder 'subnavn' som er navnet på undermenuen. Der er også et felt som hedder 'gaa_til' - det er den side som linket skal gå til. Det kan også laves på andre måder, men denne passede til mit brug.

Koden er:
<%
set conn2 = server.createobject("ADODB.connection")
path = Server.MapPath("DB.mdb")
conn2.Open "DBQ="& path &";DefaultDir="& path & ";Driver={Microsoft Access Driver (*.mdb)}"

SQL2 = "SELECT * from kategori"
set RS2 = Conn2.Execute(SQL2)
%>


<br>
<table width="162">
 
  <%
  do until rs2.eof
  %><tr>
    <td><a href="default.asp?id=<%=rs2("gaa_til")%>&menu=<%=rs2("id")%>" class="menu"><%=rs2("navn")%></a><br>
                    <%
                  if int(Request.QueryString("menu")) = rs2("id") then
                  set conn3 = server.createobject("ADODB.connection")
path = Server.MapPath("DB.mdb")
conn3.Open "DBQ="& path &";DefaultDir="& path & ";Driver={Microsoft Access Driver (*.mdb)}"
SQL3 = "SELECT * from submenu where katid = " & rs2("id") & ""
set RS3 = Conn3.Execute(SQL3)%>

                      <% Do until rs3.eof %>
                      <table width="100%">
        <tr>
          <td width="100%"><a href="default.asp?menu=<%=rs2("id")%>&id=<%=rs3("gaa_til")%>" class="lillemenu"><%=rs3("subnavn")%></a></td>
        </tr>
      </table>
                     
<% rs3.movenext
loop
rs3.close
set rs3 = nothing
end if
%>
     
</td>
<%
RS2.movenext
loop

Conn2.Close
Set Conn2 = Nothing
%>

</tr>
</table>
Avatar billede tblaster Nybegynder
29. juli 2003 - 08:33 #6
jnissen ... så bliver det udskrevet på en lang lise. Submenuerne til en kategori bliver ikke udskrevet under kategorien. Og den skal jo kun udskrives hvis den pågældende kategori er åben.

Se hvad jeg får her:
http://www.just2funny.dk/1/1/
Avatar billede tblaster Nybegynder
29. juli 2003 - 11:32 #7
Fik det sku løst. Men det er en noget grim løsning. Men det er der jo ikke noget at gøre ved. Tak for interessen.
Avatar billede tblaster Nybegynder
29. juli 2003 - 11:32 #8
.
Avatar billede jnissen Nybegynder
29. juli 2003 - 13:15 #9
Hvad mener du med grim løsning?
Avatar billede tblaster Nybegynder
29. juli 2003 - 13:21 #10
Det var den måde jeg løste det på der var grimt ... det var ikke din .. hvis du vil se så her:

<%
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
29. juli 2003 - 13:22 #11
Det er noget af en idiot løsning og den giver egentligt heller ikke helt det rigtige resultat kan jeg se efter at have testet den lidt mere. Men den er godt 95% ok så det er bedre end det jeg stod med før!
Avatar billede jnissen Nybegynder
29. juli 2003 - 13:50 #12
Den kode du fik burde altså virke. Det er den jeg bruger på fx. www.klemensker-if.dk og www.bodytone.dk - Er det ikke sådan den skal virke, eller har jeg misforstået dig?
Avatar billede tblaster Nybegynder
29. juli 2003 - 13:58 #13
Kan den menu også gå ned i 3 niveauer? Altså:

kategori1
    underkategori1
    underkategori2
kategori2
    underkategori3
          underunderkategori1

Syntes ikke jeg kan se nogen underunderkategori1 ... hvis du gider hjælpe mig med at få stablet det på benene så vil jeg gerne give dig de 200 point! Hvis så tror jeg vi skal starte helt fra starten og starte med at sætte en frisk db op som virker til det du skriver. Så er jeg sikker på ikke lave fejl i og med at jeg ændre det til at passe til min db. Hvis der var mulighed for at jeg kunne hente hele koden samt db'en bag kode og være sikker på at den virker med de så kan jeg også fint selv ændre den så den virker til mit system. Det vigtigste er bare at dens ihvertifald skal virke ned til 3 niveau.
Avatar billede jnissen Nybegynder
29. juli 2003 - 14:19 #14
Nej den kan desværre ikke gå ned i 3. niveau, og jeg skal kører nu, men jeg kan prøve at kigge på det når jeg kommer hjem.
Avatar billede wandaxp Praktikant
24. august 2007 - 23:15 #15
Findes den menu kode som siden www.bodytone.dk satdig, og er den mulig at se?
Kan godt åbne nyt spørgsmål for point, den har bare relevans for dette spørgsmål :-)
Avatar billede tblaster Nybegynder
25. august 2007 - 09:36 #16
Hvis det er mig du spørger, så nej, jeg ligger ikke inde med koden fra bodytone.dk.
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