07. august 2008 - 12:54Der er
9 kommentarer og 3 løsninger
Simpel menu
Hej,
Jeg må have stirret mit godt blind på det her, for kan simpelthen ikke lige se mig en løsning.
Jeg ønsker en menu.
1. Forside 2. Velkommen 3. Nyheder 3.1 Nyeste nyt 3.2 Aller nyeste 4. Verdensur 5. GoogleLinks 5.1 Google.dk 5.2 Jubbi.dk
Det jeg ønsker er kun at vise undermenuen til den hovedmenu der er valgt.
menuerne kommer fra en database men det er ikke det der er så væsentligt.
Alle min links henviser til ID'et i database og det er her problemet ligger, så længe ID'et henviser til et hovedmenupunkt kan jeg fint få udskrevet undermenuerne.
sMenuLevel = Request.querystring("id")
set sRS = conn.execute("SELECT * from internetGroup where ParentGroup='"& sMenuLevel &"'") if sRs.eof or sRS.bof then ' ingen undermenuer else while not sRs.eof or sRs.bof ' udskriv undermenuerne.... sRs.movenext wend end if
Men når jeg så vælger et undermenupunkt så går det galt, så havde egentlig tænkt mig at gemme det som en session, og så lave et eller andet?
Det er ikke til at sige uden mere kode. Ja, du kan gøre det med Session, men du kunne også skrive det om, så hovedmenupunkts id og undermenupunkts id lå 2 forskellige steder og derved ikke overskrev hinanden.
sessions vil mere eller mindre være formålsløst - kommer en besøgende fx fra et link i en mail eller via en søgemaskine ville resultatet ikke blive som forventet fra din side.
En recursiv funktion kunne være en ide, hvis du har flere niveauer end 2. Ellers kan du lave et simpelt tjek.
Dette er fast kode til kun 2 niveauer (ikke testet):
'Typecast ID'et så du undgår sql injections sMenuLevel = cLng(Request.querystring("id"))
'Hent alle top menuer set RS = conn.execute("SELECT * from internetGroup where ParentGroup is null") while not RS.eof response.write RS("title") &"<br>" if isCurrentOrChildMenuSelected(RS("ID")) then set sRS = conn.execute("SELECT * from internetGroup where ParentGroup="& RS("ID")) while not sRS.eof response.write " " RS("title") &"<br>" sRS.MoveNext wend end if RS.MoveNext wend
function isCurrentOrChildMenuSelected(fID) dim fRS if sMenuLevel = fID then isCurrentOrChildMenuSelected = true else set fRS = conn.execute("SELECT * from internetGroup where ParentGroup='"& fID &"' and ID="& sMenuLevel) if fRS.eof then isCurrentOrChildMenuSelected = false else isCurrentOrChildMenuSelected = true end if end if end function
w13, fennec, keyseroze: tak for jeres input jeg vil dele point mellem jer.
Jeg endte med at tage fennecs løsning, og den virker med nedenstående.
<% ' Shared functions
' Show WebShopMenu function shopMenu() 'Typecast ID'et så du undgår sql injections
call openDB(conn) 'Hent alle top menuer set RS = conn.execute("SELECT * from internetGroup where ParentGroup=''") while not RS.eof response.Write "<div class=""menubutton"">" response.write "<a href=""/shop/showGroups.asp?GroupName=" & RS("name") & """ class=""menu"">" & RS("name") &"</a><br>" response.Write "</div>" if isCurrentOrChildMenuSelected(RS("name")) then set sRS = conn.execute("SELECT * from internetGroup where ParentGroup='"& RS("name") & "'") while not sRS.eof response.Write "<div class=""menubutton"">" response.write "- <a href=""/shop/showGroups.asp?GroupName=" & sRS("name") & """ class=""menu"">" & sRS("name") &"</a><br>" response.Write "</div>" sRS.MoveNext wend end if RS.MoveNext wend
end function
function isCurrentOrChildMenuSelected(fID) sMenuLevel = Request.querystring("groupName") call openDB(conn) dim fRS if sMenuLevel = fID then isCurrentOrChildMenuSelected = true else 'response.Write("SELECT * from internetGroup where ParentGroup='"& fID &"' and name='"& sMenuLevel & "'") set fRS = conn.execute("SELECT * from internetGroup where ParentGroup='"& fId &"' and name='"& sMenuLevel & "'") if fRS.eof then isCurrentOrChildMenuSelected = false else isCurrentOrChildMenuSelected = true end if end if end function %>
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.