Avatar billede hehlers Nybegynder
06. juli 2006 - 10:18 Der er 8 kommentarer

Vandret menu fra DB i to niveauer

Hejsa

Jeg har en menu som trækker menupunkter ud fra en DB.

Eksemplet kan ses her:
http://www.oneweb.dk/onecms/default.asp?side=Produkter&menu_niveau_2=12

Som i kan se står menupunktet "kontakt" et forkert sted. Og ud fra koden er det egentligt klart nok.

Men hvordan skal følgende kode være hvis det skal stå rigtigt?

------------------------------------
<table width="100%" border="0" cellspacing="0" cellpadding="<%=RsDesign("design_menu_padding")%>">
<tr>
<td>
    <table width="<%=restMenu%>" border="0" cellspacing="0" cellpadding="3" class="almtxt" align="<%=RsDesign("design_menu")%>">
<tr>
<td valign="middle">
<%                                                                     
    If not RsMenu.EOF then
    RsMenu.movefirst
    while not RsMenu.eof
%>
    <a href="default.asp?side=<%=RsMenu("menu_txt")%>&menu_niveau_2=<%=RsMenu("id")%>" class="menutxt"><%=RsMenu("menu_txt")%></a> |
<% 
    if RsMenu2("menu_niv_2") = rsMenu("id") then
%>
<br>
<%   
    Query= " SELECT * from tbl_menu where menu_niv_2 =" & rsMenu("id") & " order by menu_order"
    Set RsMenuSub = Conn.Execute(Query)   
                                                                 
    If not RsMenuSub.EOF then
    RsMenuSub.movefirst
    while not RsMenuSub.eof
%>
&nbsp;<a href="default.asp?side=<%=RsMenuSub("menu_txt")%>&menu_niveau_2=<%=RsMenuSub("menu_niv_2")%>" class="txtlinks"><%=RsMenuSub("menu_txt")%></a> |    
<%                                                                       
    RsMenuSub.MoveNext
    Wend
    End If
   
    RsMenuSub.close
    Set RsMenuSub = nothing
    end if                                                                     

    RsMenu.MoveNext
    Wend
    End If
%>

</td>
</tr>
</table>
--------------------------------

På forhånd tusind tak.
Avatar billede madeindk Nybegynder
06. juli 2006 - 13:56 #1
Hvordan mener du den står forkert?
Avatar billede hehlers Nybegynder
06. juli 2006 - 14:06 #2
Som det kan ses på: http://www.oneweb.dk/onecms/default.asp?side=Produkter&menu_niveau_2=12

Så vil jeg jo gerne have kontakt op og stå ved siden af Produkter, da kontakt hører til i niveau 1.

Håber det giver bedre mening? :)
Avatar billede nielle Nybegynder
08. juli 2006 - 09:21 #3
Du bliver nødt til at udskrive alle menuer på niveau-1 før at du starter på at udskrive på niveau-2.

Du kan ikke udskrive et niveau-1 menupunkt, så de tilhørende niveau-2 menupunkter, for så at udskrive resten af niveau-1 menupukterne.
Avatar billede hehlers Nybegynder
10. juli 2006 - 13:58 #4
Nu har jeg prøvet først at udskrive niveau 1 og derefter noveau 2.

Dette vha. følgende kode:
--------------------------
<%
    ' Hent menustruktur.
    Query= " SELECT * from tbl_menu where menu_niveau = 1 order by menu_order"
    Set RsMenu = Conn.Execute(Query)
   
    menu_niveau_2 = request.querystring("menu_niveau_2")
    if menu_niveau_2 <> "" then
        Query= " SELECT * from tbl_menu where menu_niv_2 =" & menu_niveau_2 & " order by menu_order"
        Set RsMenu2 = Conn.Execute(Query)
    else
        Query= " SELECT * from tbl_menu where menu_niveau = 1 order by menu_order"
        Set RsMenu2 = Conn.Execute(Query)
    end if
%>
<% if RsDesign("design_type") = 2 then %>
<table width="100%" border="0" cellspacing="0" cellpadding="<%=RsDesign("design_menu_padding")%>">
  <tr>
    <td>
    <table width="<%=restMenu%>" border="0" cellspacing="0" cellpadding="3" class="almtxt" align="<%=RsDesign("design_menu")%>">

  <tr>
    <td valign="middle" align="<%=RsDesign("design_menu")%>">
<%                                                             
    If not RsMenu.EOF then
    RsMenu.movefirst
    while not RsMenu.eof
%>
    <a href="default.asp?side=<%=RsMenu("menu_txt")%>&menu_niveau_2=<%=RsMenu("id")%>" class="menutxt"><%=RsMenu("menu_txt")%></a> |
<% 
    RsMenu.MoveNext
    Wend
    End If
   
    if RsMenu2("menu_niv_2") = rsMenu("id") then

    Query= " SELECT * from tbl_menu where menu_niv_2 =" & rsMenu("id") & " order by menu_order"
    Set RsMenuSub = Conn.Execute(Query)   
%>
<br>
<%                       
    If not RsMenuSub.EOF then
    RsMenuSub.movefirst
    while not RsMenuSub.eof
%>
&nbsp;<a href="default.asp?side=<%=RsMenuSub("menu_txt")%>&menu_niveau_2=<%=RsMenuSub("menu_niv_2")%>" class="txtlinks"><%=RsMenuSub("menu_txt")%></a> |    
<%                                                                       
    RsMenuSub.MoveNext
    Wend
    End If
   
    RsMenuSub.close
    Set RsMenuSub = nothing
    end if                                           
%>
</td>
</tr>
</table>
</td>
</tr>
</table>
---------------------------------
Desværre får jeg så følgende fejl:

Exception occurred, line 36
Avatar billede nielle Nybegynder
10. juli 2006 - 18:52 #5
Hvilken linje er nr. 36?
Avatar billede nielle Nybegynder
10. juli 2006 - 19:11 #6
Du har i hvertfald denne her, hvor det går galt:

...
<%                                                             
    If not RsMenu.EOF then
        RsMenu.movefirst
        while not RsMenu.eof
%>
        <a href="default.asp?side=<%=RsMenu("menu_txt")%>&menu_niveau_2=<%=RsMenu("id")%>" class="menutxt"><%=RsMenu("menu_txt")%></a> |
<% 
            RsMenu.MoveNext
        Wend
    End If
   
    if RsMenu2("menu_niv_2") = rsMenu("id") then
        Query= " SELECT * from tbl_menu where menu_niv_2 =" & rsMenu("id") & " order by menu_order"
        Set RsMenuSub = Conn.Execute(Query
...


Med den første While-løkke løber du hele RsMenu() igennem, og derfor fejler det når du efterfølgende prøver at spørge med:

    if RsMenu2("menu_niv_2") = rsMenu("id") then
Avatar billede hehlers Nybegynder
11. juli 2006 - 08:48 #7
Linie 36 er netop den linie du skriver: :)

  if RsMenu2("menu_niv_2") = rsMenu("id") then

Dvs. at jeg skal have en undtagelse ved rsMenu?

På forhånd tak
Avatar billede nielle Nybegynder
11. juli 2006 - 18:36 #8
Hvad du skal gøre i stedet afhænger jo af hvad det er du vil have ud af det. Det er dog sikkert at du ikke lige kan gøre det på den måde.

Mit råd er at starte forfra, og så i første omgang glemme alt om at få det stillet op i en tabel. På den måde undgår du bedre at drukne i en masse detaler som egentligt er lidt irellevante. Når du først har fået den simple løsning til at fungere, er det bagefter nemt at putte "pynten" 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