Avatar billede tobby Nybegynder
22. juni 2002 - 17:58 Der er 5 kommentarer og
1 løsning

Dynamisk menu

Jeg har to tabeller:

* Menu, indeholdende ID og Navn
* Docs, indeholdende bl.a. ID, ParentID, Level, Childs og Titel

Nedenstående kode virker fint på den måde at den viser mig alle records i Menu samt de Docs der passer i under de respektive Menu-id'er.

Spørgsmålet er hvordan jeg får gjort menuen "uendelig" således at hvis et Doc har et Child så skrives der en ny linie. Hvis dette Doc også har et Child så skrives endnu en linie osv.

Det er meget svært for mig at forklare, så hvis I ikke forstår, kal jeg prøve at uddybe det.


<%
do until Menu.EOF

  Response.Write("<li id=""foldheader"">" & Menu("Navn") & "</il>")
  Response.Write("<ul id=""foldinglist"" style=""display:none"" style=&{head};>")
   
  do until Docs.EOF
   
    if Docs("ParentID") = Menu("ID") Then
      if Docs("Childs") = "Yes" Then
        Response.Write("<li id=""foldheader"">" & Docs("Titel") & "</il>")
      Else
        Response.Write("<li><a href=>" & Docs("Titel") & "</a></li>")
      end if
    end if
   
  Docs.MoveNext
  loop
   
Response.Write("</ul>")
Menu.MoveNext
Docs.MoveFirst
Loop
%>
Avatar billede medions Nybegynder
22. juni 2002 - 18:03 #1
Hmm.. brug denne i stedet...

<html>
    <head>
        <title>Bransholm IT Group</title>
    </head>
<body>

<script language="JavaScript">
    function showMnu(id) {
        var styleCheck = document.getElementById("mnu" + id).style.display;
        //alert(styleCheck);
       
        if (styleCheck == "inline") {
            document.getElementById("mnu" + id).style.display = "none";
        }
        if (styleCheck == "none") {
            document.getElementById("mnu" + id).style.display = "inline";
        }
    }
    function showLink(url) {
        alert(url);
    }
</script>

<%
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db.mdb")
        SQL = "SELECT * FROM menu"
        Set rs = Conn.Execute(SQL)

    While NOT rs.EOF
            Response.Write("<div style=""Cursor:Hand; Font-Family:Verdana; Font-Size: 13px;"" OnClick=""showMnu(" & rs("mnuID") & ");"">" & rs("mnuNavn") & "</div>" & vbCrLf)
           
            SQL = "SELECT * FROM mnuChilds WHERE mnuID=" & rs("mnuID")
            Set rsMnu = Conn.Execute(SQL)
           
           
                Response.Write(vbTab & "<div style=""Cursor:Hand; Font-Family:Verdana; Font-Size: 11px;display:none;"" id=""mnu" & rs("mnuID") & """>" & vbCrLf)
               
            While NOT rsMnu.EOF
                Response.Write(vbTab & "&nbsp;-<span onClick=""showLink('" & rsMnu("UmnuURL") & "')"">" & rsMnu("UmnuNavn") & "</span><br>" & vbCrLf)
            rsMnu.MoveNext
            Wend
                Response.Write("</div>" & vbCrLf)

    rs.MoveNext
    Wend
   
    Set rs = Nothing
    Conn.Close
    Set Conn = Nothing
%>

</body>
</html>

//>Rune
Avatar billede tobby Nybegynder
22. juni 2002 - 18:14 #2
Hvorfor skulle det være bedre end det jeg har lavet??

- det giver mig jo blot samme problemstilling.
Avatar billede tobby Nybegynder
22. juni 2002 - 18:15 #3
- har dog prøvet din kode alligevel, og det løser ikke problemet.
Det giver dog en del javs-script fejl.
Avatar billede tobby Nybegynder
22. juni 2002 - 18:22 #4
hmm poster lige HELE koden, så kan det være det er nemmere at forstå.

<!-- #include file="include/check_type.asp" -->
<!-- #include file="include/check_type.asp" -->
<%
Response.Buffer = True

Query = "SELECT TOP 1 * FROM Docs ORDER BY Level DESC"

Set Docs = Server.CreateObject("ADODB.RecordSet")
Docs.Open Query, Connect, 0

MaxLevel = Docs("Level")

Docs.Close
Set Docs = Nothing

Query = "SELECT * FROM Menu ORDER By Navn DESC"

Set Menu = Server.CreateObject("ADODB.RecordSet")
Menu.Open Query, Connect, 0

Query = "SELECT * FROM Docs ORDER BY Titel DESC"

Set Docs = Server.CreateObject("ADODB.RecordSet")
Docs.Open Query, Connect, 0

%>

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<LINK rel="stylesheet" type="text/css" href="include/style.css">
<style>
<!--
#foldheader{cursor:pointer;cursor:hand ; font-weight:bold ;
list-style-image:url(images/fold.gif)}
#foldinglist{list-style-image:url(images/list.gif)}
//-->
</style>
<script language="JavaScript1.2">
<!--

//Smart Folding Menu tree- By Dynamic Drive (rewritten 03/03/02)
//For full source code and more DHTML scripts, visit http://www.dynamicdrive.com
//This credit MUST stay intact for use

var head="display:''"
img1=new Image()
img1.src="images/fold.gif"
img2=new Image()
img2.src="images/open.gif"

var ns6=document.getElementById&&!document.all
var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1

function checkcontained(e){
var iscontained=0
cur=ns6? e.target : event.srcElement
i=0
if (cur.id=="foldheader")
iscontained=1
else
while (ns6&&cur.parentNode||(ie4&&cur.parentElement)){
if (cur.id=="foldheader"||cur.id=="foldinglist"){
iscontained=(cur.id=="foldheader")? 1 : 0
break
}
cur=ns6? cur.parentNode : cur.parentElement
}

if (iscontained){
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
if (foldercontent.style.display=="none"){
foldercontent.style.display=""
cur.style.listStyleImage="url(images/open.gif)"
}
else{
foldercontent.style.display="none"
cur.style.listStyleImage="url(images/fold.gif)"
}
}
}

if (ie4||ns6)
document.onclick=checkcontained

//-->
</script>
</HEAD>
<BODY>
<font face="Verdana">
<ul>
<%
do until Menu.EOF

    Response.Write("<li id=""foldheader"">" & Menu("Navn") & "</il>")
    Response.Write("<ul id=""foldinglist"" style=""display:none"" style=&{head};>")
   
    do until Docs.EOF
   
        if Docs("ParentID") = Menu("ID") Then
            if Docs("Childs") = "Yes" Then
                Response.Write("<li id=""foldheader"">" & Docs("Titel") & "</il>")
            Else
                Response.Write("<li><a href=>" & Docs("Titel") & "</a></li>")
            end if
        end if
   
    Docs.MoveNext
    loop
   
Response.Write("</ul>")
Menu.MoveNext
Docs.MoveFirst
Loop
%>
</BODY>
</HTML>
<%
Menu.Close
Set Menu = Nothing
Docs.Close
Set Docs = Nothing
%>
Avatar billede askhoej Praktikant
22. juni 2002 - 19:15 #5
Hej Tobby

Det du skal bruge er det samme som når man laver et trådet debatforum, prøv at hente denne kildekode og se hvordan han gør - det er præcis det samme du skal gøre :-)

Du skal dog passe på performance hvis din menu er kæmpestor.

URL:
http://www.netcoders.dk/sources.asp?mode=view_source&tech_id=1&id=469

/askhoej
Avatar billede tobby Nybegynder
22. juni 2002 - 21:07 #6
Askhoej -> med lidt modifikationer virker det næsten. Se evt. nyt spørgsmål under Javascript...
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