03. juni 2004 - 12:14Der er
23 kommentarer og 1 løsning
Menu til hjælp
jeg har denne menu som kalder en menu ind fra access databse. I denne database har jeg disse felter som menuen skal bruge:
id, navn, sublink, vente, topmenu, menuposition
id = ja det siger sig selv.
navn = dette er navnet på menuen.
sublink = dette felt er hvis man ønsker at tilføje menuen til andre menuer, som en slags undermenu.
vente = er til hvis menuen ikke ønskes tilføjet lige nu.
topmenu = er hvsi dette menu punkt skal kunne ses i hovede menuen.
menuposition = er til for at kunne vælge hvor i hovedet menuen navnet skal stå, ved ikke lige hvordan jeg griber det an.
denne kode kalder fint hovede menuerne ud. Nu er det så at jeg gerne vil have kaldt en undermenu ud via sublink.
koden skal så gå ind og se om linket er på vente og derefter udskrive hovedet menuen efter menuposition. Hvis der så klikkes i hovede menuen skal den vise de sublink der er tilføjet under det navn.
men jeg ved ikke lige hvordan jeg griber dette an.
<!--#include virtual="www/db/connection.asp" --> <% strSQL = "Select * From sider Where topmenu = 'top'" Set rs = Conn.Execute(strSQL)
set rs1 = conn.execute("Select * From sider Where sublink="& rs("id")) do while not rs1.eof Response.Write "<li> -- <a href='default.asp?id=" & rs1("id") & "'>" & rs1("navn") & "</a></li>" loop
if cstr(request.querystring("id")) = cstr(rs("id")) then set rs1 = conn.execute("Select * From sider Where sublink="& rs("id")) do while not rs1.eof Response.Write "<li> -- <a href='default.asp?id=" & rs1("id") & "'>" & rs1("navn") & "</a></li>" loop end if
if cstr(request.querystring("id")) = cstr(rs("id")) then set rs1 = conn.execute("Select * From sider Where sublink="& rs("id")) do while not rs1.eof Response.Write "<li> -- <a href='default.asp?id=" & rs1("id") & "'>" & rs1("navn") & "</a></li>" loop end if
if cstr(request.querystring("id")) = cstr(rs("id")) then set rs1 = conn.execute("Select * From sider Where sublink="& rs("id")) do while not rs1.eof Response.Write "<li> -- <a href='default.asp?id=" & rsl("id") & "'>" & rsl("navn") & "</a></li>" loop end if
rs.MoveNext wend Conn.Close Set Conn = Nothing
%>
og der får jeg en fejl i linje 15 som er
den udskriver helt bestemt dette:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
Det synes jeg ikke er en god database opbygning, men vi kan godt klare det alligevel :o)
if cstr(request.querystring("id")) = cstr(rs("id")) then if trim(rs("sublink")) <> "" then tempLink = split(rs("sublink")," ") for f=lbound(tempLink) to ubound(tempLink) set rs1 = conn.execute("Select * From sider Where id="& tempLink(f)) if not rs1.eof then Response.Write "<li> -- <a href='default.asp?id=" & rsl("id") & "'>" & rsl("navn") & "</a></li>" end if next end if end if
Men jeg vil anbefale at du laver om på opbygningen. Du skal bare ændre dit sublink fra tekst til tal. Også skal den indeholde parent værdien.
Hvis nu ID 5 havde "23 25 29" til at stå i sublink nu, så skulle id 23, 25 og 29 have 5 til at stå i sublink (parent værdi) efter ombygningen.
nu fik jeg det til at virke. Men der er noget ved det (parent værdi) jeg syntes er et problem.
Hvis menu1 åbnes og link vises og der efetr trykke på et link som hedder menu3 så hopper den ned og vise link i menu3.
jeg vil gerne have at den bliver ved med at vise menu1 og dens link, men så går ind og viser de link der er i sublink for menu3 når klikkes på den, unden at den lukker sammen og åbner menu3.
på samme måde som nu, bare den ikke hopper sådanne rundt i menuerne.
if cstr(cstr(rs("id")) > then if trim(rs("sublink")) <> "" then tempLink = split(rs("sublink")," ") for f=lbound(tempLink) to ubound(tempLink) set rs1 = conn.execute("Select * From sider Where id="& tempLink(f)) if not rs1.eof then Response.Write "<li> -- <a href='default.asp?id=" & rsl("id") & "'>" & rsl("navn") & "</a></li>" end if next end if end if
I toppen af din side skal du gemme/fjerne sideID'et fra en session variabel, som indeholder en liste over alle menu punkter som skal være åbne, så du han en session variabel som ser sådan ud:
session("openMenuIDs") = "5,12,8"
Din udskrivning bliver så sådan:
myTempArr = split(session("openMenuIDs"), ",") for j=lbound(myTempArr) to ubound(myTempArr) if cstr(myTempArr(j)) = cstr(rs("id")) then tempLink = split(rs("sublink")," ") for f=lbound(tempLink) to ubound(tempLink) set rs1 = conn.execute("Select * From sider Where id="& tempLink(f)) if not rs1.eof then Response.Write "<li> -- <a href='default.asp?id=" & rsl("id") & "'>" & rsl("navn") & "</a></li>" end if next end if next
jo, men de skal selvfølgelig genereres dynamisk. Noget i denne stil.
if request.querystring("id") <> "" then if session("openMenuIDs") = "" then session("openMenuIDs")=request.querystring("id") else session("openMenuIDs") = session("openMenuIDs") &","& request.querystring("id") end if
Der skal så også værer noget med at fjerne ID'et istedet, hvis det allerede er på listen.
jeg kan ikke få den til at lukke menuen sammen og kun åbne link i det menu punkt der bliver klikket på. men det går nok, må lave med det til jeg finder en løsning. Lægger du et svar..
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.