Avatar billede mini-me Nybegynder
07. august 2008 - 12:54 Der 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?

Men kan ikke få det til at virke.

Nogle kloge hoveder?
Avatar billede w13 Novice
07. august 2008 - 13:06 #1
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.
Avatar billede keysersoze Guru
07. august 2008 - 13:15 #2
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.
Avatar billede w13 Novice
07. august 2008 - 13:17 #3
Ja, det ville vel være bedst at sætte en variable på hver side, som fortæller, hvilken undermenu siden hører under.
Avatar billede mini-me Nybegynder
07. august 2008 - 13:37 #4
Keysersoze: det havde jeg ikke tænkt på, god pointe.

Det lader til jeg må lave det med variabel der peger på hovedsiden.
Avatar billede fennec Nybegynder
07. august 2008 - 14:03 #5
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 "&nbsp;&nbsp;" 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
Avatar billede mini-me Nybegynder
11. august 2008 - 11:25 #6
Fennec: Jeg kan ikke få det til at virke, kan ikke se hvor sMenuLevel får nogen værdi fra?
Avatar billede w13 Novice
11. august 2008 - 11:42 #7
Det får det jo fra Querystringen "id".
Avatar billede mini-me Nybegynder
15. august 2008 - 10:00 #8
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
%>
Avatar billede w13 Novice
15. august 2008 - 10:31 #9
:)
Avatar billede keysersoze Guru
16. august 2008 - 13:30 #10
et lille svar :)
Avatar billede mini-me Nybegynder
20. august 2008 - 11:22 #11
fennec: Mangler svar fra dig.
Avatar billede fennec Nybegynder
25. august 2008 - 08:17 #12
Det får du her. Er lige kommet hjem fra ferie.

.o) <-- One Eyed Jack
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