Avatar billede kimborg Nybegynder
19. december 2006 - 09:10 Der er 16 kommentarer og
1 løsning

Undermenu i asp

Hey og god jul!

Hvordan laver jeg en undermenu til nedenstående menu, således at når man klikker på et hovedmenupunkt, så kommer undermenuen frem nedenunder??

Eks.

|Profil|Kontakt|Om os|
Undermenu1 - Undermenu2 - Undermenu3

Hovedmenuen ser sådan ud:

<!--#include file="connection.inc"-->
<%
strSQL = "Select * FROM Menu ORDER BY Tekst"
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write " | "
    Do While NOT RS.EOF

  strNavn = rs("Tekst")

  strLink = "<a href='" & rs("Link") & "'>" & strNavn & "</a>"

  Response.Write strLink & " | "

  rs.MoveNext
  Loop
End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede madeindk Nybegynder
19. december 2006 - 09:55 #1
1) Du skal lave et felt i din database der hedder MenuID fx., og som standard skal menupunkter have MenuID = 0, hvis MenuID = 0 så skal det være hovedmenu. MenuID vil være hoved menu IDet og hvis man er inde under det ID skal den liste menupunkter der passer til det ID.

Det kan du lige starte med at lave :-) Husk det skal være talfelt.
Avatar billede kimborg Nybegynder
19. december 2006 - 10:15 #2
Okay, nu har jeg lavet feltet i DB, men er ikke helt klar over hvordan laver det andet... :o(
Avatar billede ffsoft Praktikant
19. december 2006 - 10:58 #3
Prøv at google på 'menu java' så skal du bare se. Der findes i hundredvis
af løsninger. Det er meget nemmere og hurtigere end at lave det i .asp
Avatar billede kimborg Nybegynder
19. december 2006 - 11:01 #4
Det har jeg også haft, men har brug for at kunne rette menuen online uden at skulle uploade menuen igen.

madeindk: Jeg har nu lavet følgende, men det virker ikke helt, kan du se hvad der er galt?

<!--#include file="connection.inc"-->
<%
strSQL = "Select * FROM Menu ORDER BY Tekst"
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF AND RS("MenuID") = 0

  strNavn = rs("Tekst")

  strLink = "<a href='" & rs("Link") & "'>" & strNavn & "</a>"

  Response.Write strLink & "<font color=""#999999""> | </font>"

  rs.MoveNext
  Loop
End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede madeindk Nybegynder
19. december 2006 - 11:12 #5
Ok - cool - nu har jeg skrevet lidt kode som måske kan få dig til at se logikken i det :-)

<!--#include file="connection.inc"-->

<%
strSQL = "SELECT * FROM Menu WHERE MenuID=0 ORDER BY Tekst ASC "
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF

  strNavn = rs("Tekst")

  strLink = "<a href='" & rs("Link") & "'>" & strNavn & "</a>"

  Response.Write strLink & "<font color=""#999999""> | </font>"

  SQL = "SELECT * FROM menu WHERE menuID=" & rs("id") & ""
  Set rs2 = Conn.Execute(strSQL)

  If rs.eof Then
    Response.Write("Ingen undermenuer")
  Else
 
  Response.Write("Undermenu")

  rs2.movenext
  loop
  end if

  rs.MoveNext
  Loop
End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede kimborg Nybegynder
19. december 2006 - 11:15 #6
Okay nu virker den første del, men hvordan laver jeg så undermenuen??

Menu.asp

<!--#include file="connection.inc"-->
<%
strSQL = "Select * FROM Menu ORDER BY Tekst"
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF
    If RS("MenuID") = "0" Then

    strNavn = rs("Tekst")
    strLink = "<a href='" & rs("Link") & "'>" & strNavn & "</a>"
    Response.Write strLink & "<font color=""#999999""> | </font>"

    Else

    Response.Write ""

    End if
  rs.MoveNext
Loop
End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede madeindk Nybegynder
19. december 2006 - 11:15 #7
Nej nej, hvad sker der for mig ?! Jeg prøver lige igen.

<!--#include file="connection.inc"-->

<%
strSQL = "SELECT * FROM Menu WHERE MenuID=0 ORDER BY Tekst ASC "
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF

  strNavn = rs("Tekst")

  strLink = "<a href='" & rs("Link") & "'>" & strNavn & "</a>"

  Response.Write strLink & "<font color=""#999999""> | </font>"

  strSQL = "SELECT * FROM menu WHERE menuID=" & rs("id") & ""
  Set rs2 = Conn.Execute(strSQL)

  If rs2.eof Then
    Response.Write("Ingen undermenuer")
  Else
 
  Response.Write("Undermenu")

  rs2.movenext
  loop
  end if

  rs.MoveNext
  Loop

End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede madeindk Nybegynder
19. december 2006 - 11:21 #8
Du laver vel bare en ny post med et menuID der har et ID som en hovedmenu har. Fx. hvis du har en hovedmenu (altså med menuID = 0) så laver du bare en ny post i Access der hedder "Test undermenu" med menuID = hovedmenuens ID, så skulle den meget gerne blive vist :-)
Avatar billede kimborg Nybegynder
19. december 2006 - 11:51 #9
Submenuen førlger med på alle sider, but why??

<!--#include file="connection.inc"-->
<%
strSQL = "SELECT * FROM Menu WHERE MenuID=0 ORDER BY Tekst ASC "
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF

  strNavn = rs("Tekst")
  strLink = "<a href='" & rs("Link") & "'>" & strNavn & "</a>"
  Response.Write strLink & "<font color=""#999999""> | </font>"

  strSQL2 = "SELECT * FROM Menu WHERE MenuID=" & rs("ID") & ""
  Set rs2 = Conn.Execute(strSQL2)

  Do While NOT rs2.eof

  strNavn2 = rs2("Tekst")
  strLink2 = "<a href='" & rs2("Link") & "'>" & strNavn2 & "</a>"
  Response.Write "<div class=""Submenu"">" & strLink2 & "&nbsp;&nbsp;</div>"

  rs2.movenext
  loop

  rs.MoveNext
  Loop

End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede madeindk Nybegynder
19. december 2006 - 21:52 #10
Jeg kunne vel ikke evt. få lov til at se din side? Jeg kunne godt tænke mig at se hvordan du vil ha det til at se ud :-)
Avatar billede kimborg Nybegynder
19. december 2006 - 22:15 #11
Jo da, udover at undermenuerne følger med på alle sider, så viser de også oveni hinanden, det er nok noget CSS, som skal rettes.

http://elitesociety.dk/menu.png
Avatar billede madeindk Nybegynder
20. december 2006 - 11:48 #12
Hmm... Når du klikker på et menupunkt kommer man så ind under et ID?

Altså fx. http://www.elitesociety.dk/default.asp?ID=11 fx.
Avatar billede kimborg Nybegynder
20. december 2006 - 13:54 #13
Har nu prøvet med denne, men får fejlen:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

/login/admin/menu.asp, line 17


Menu.asp:

<!--#include file="connection.inc"-->
<%
strSQL = "SELECT * FROM Menu WHERE MenuID=0 ORDER BY Tekst ASC "
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF

  strNavn = rs("Tekst")
  strLink = "<a href='" & rs("Link") & "?MenuID=" & RS("ID") & "'>" & strNavn & "</a>"
  Response.Write strLink & "<font color=""#999999""> | </font>"

  strSQL2 = "SELECT * FROM Menu WHERE MenuID = " & Request.querystring("MenuID")
  Set rs2 = Conn.Execute(strSQL2)

  Do While NOT rs2.eof

  strNavn = rs2("Tekst")
  strLink = "<a href='" & rs2("Link") & "'>" & strNavn & "</a>"
  Response.Write "<div class=""Submenu"">" & strLink & "&nbsp;&nbsp;</div>"

  rs2.movenext
  loop

  rs.MoveNext
  Loop

End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede madeindk Nybegynder
20. december 2006 - 14:57 #14
Jamen, er MenuID i din querystringen da udfyldt? Ellers prøv dette.

<!--#include file="connection.inc"-->

<%
strSQL = "SELECT * FROM Menu WHERE MenuID=0 ORDER BY Tekst ASC "
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF

  strNavn = rs("Tekst")
  strLink = "<a href='" & rs("Link") & "?MenuID=" & RS("ID") & "'>" & strNavn & "</a>"
  Response.Write strLink & "<font color=""#999999""> | </font>"

  If Request.QueryString("MenuID") <> "" Then

      strSQL2 = "SELECT * FROM Menu WHERE MenuID = " & Request.querystring("MenuID")
      Set rs2 = Conn.Execute(strSQL2)
   
      Do While NOT rs2.eof
   
      strNavn = rs2("Tekst")
      strLink = "<a href='" & rs2("Link") & "'>" & strNavn & "</a>"
      Response.Write "<div class=""Submenu"">" & strLink & "&nbsp;&nbsp;</div>"
   
      rs2.movenext
      loop
     
  End If

  rs.MoveNext
  Loop

End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede kimborg Nybegynder
20. december 2006 - 19:14 #15
Så virker menuen og undermenuen :o), men undermenupunkterne vises oveni hinanden og ikke ved siden af hinanden????

CSS'en ser sådan ud:

.Submenu {
  position:absolute;
  text-align: left;
  left:5px;
  top:18px;
  width:100%;
  height:18px;
  margin-left:0px;
  margin-top: 0px;
  border-bottom: 0px solid #606060;
  z-index: 5;
}
.Submenu a {
  color: #EEEEEE;
  font-size: 13px;
  font-weight: bold;
  text-decoration: none;
  z-index: 5;
}
.Submenu a:hover {
  color: #FF6600;
}
Avatar billede madeindk Nybegynder
20. december 2006 - 22:24 #16
Hvorfor skal de overhovedet stå i en div? Og ikke i en tabel, så vil problemet aldrig opstå :-)

Men her er et svar.
Avatar billede kimborg Nybegynder
20. december 2006 - 22:59 #17
Jeg har løst det på følgende måde ;o)

Tusind tak for hjælpen.

<!--#include file="connection.inc"-->
<%
strSQL = "SELECT * FROM Menu WHERE MenuID=0 ORDER BY ID ASC "
Set rs = Conn.Execute(strSQL)

If RS.EOF Then
    Response.Write "Der er ingen menupunkter"
Else
  Response.Write "<font color=""#999999""> | </font>"
  Do While NOT RS.EOF OR RS.BOF

  strNavn = rs("Tekst")
  strLink = "<a href='" & rs("Link") & "?menuid=" & RS("ID") & "'>" & strNavn & "</a>"
  Response.Write strLink & "<font color=""#999999""> | </font>"

  rs.MoveNext
  Loop

End If

If Request.QueryString("MenuID") <> "" Then

    strSQL2 = "SELECT * FROM Menu WHERE MenuID = " & Request.querystring("MenuID")
    Set rs2 = Conn.Execute(strSQL2)

      Response.Write "<table class=""Submenu"">"
   
    Do While NOT rs2.eof
   
      strNavn = rs2("Tekst")
      strLink = "<a href='" & rs2("Link") & "?menuid=" & Request.querystring("MenuID") & "'>" & strNavn & "</a>"
      Response.Write strLink & "&nbsp;&nbsp;"
   
    rs2.movenext
    loop

      Response.Write "</table>"

End If

Conn.Close
Set Conn = Nothing
%>
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