12. december 2005 - 21:38Der er
11 kommentarer og 1 løsning
Undermenu går tilbage til menu
Halløjsa,
Mine newbie kundskaber har lavet en mindre menu til et website, men, når man klikker på et punkt som har et underpunkt, så viser den det underpunkt med to men når man så klikker på et punkt der, så går den tilbage til hovedmenuen - der skal den jo blive i undermenuen, hvis ikke der er undermenuer til undermenuen :) Men jeg forstår sgu ikke helt hvorfor - any ideas?? Min funktion til det ser således ud:
Function Menu(pg) menu_SQL = "SELECT id, parentId, menuNavn FROM Menu WHERE parentId = 0" set menu_RS = conn.execute(menu_SQL) if NOT menu_RS.eof then do while not menu_RS.eof response.write "- <a href=""?pg=" & menu_RS("id") & """>" & menu_RS("menuNavn") & "</a><br />"
if CStr(pg) = CStr(menu_RS("id")) then subMenu_SQL = "SELECT id, parentId, menuNavn FROM Menu WHERE parentId = " & pg & " ORDER BY menuNavn" set subMenu_RS = conn.execute(subMenu_SQL) if NOT subMenu_RS.EOF then do while NOT subMenu_RS.eof response.write " - <a href=""?pg=" & subMenu_RS("id") & """>" & subMenu_RS("menuNavn") & "</a><br />" subMenu_RS.movenext loop End if subMenu_RS.Close Set subMenu_RS = Nothing end if
Jeg har lige testet, at den faktisk heller ikke kan klare en undermenu til en undermenu :S Det havde jeg sådan set troet... Såårh, punker lige nogle flere point på, så håber jeg at der er en del vil vise mig det :)
Men jeg vil anbefale at du går over og bruger en rekursiv funktion. Jeg har lavet en som du kan finde her: http://www.eksperten.dk/spm/664011
Den viser alle menupunkter, men der skal også bare indbygges en isParent() funktion, også fungere den som en foldUdOnClick-menu. Den skal jeg nok lave, hvis du er intreserret i at bruge mit script :o)
Ehh, som sagt... Newbie evner... En rekursiv funktion? Det der eksempel i spørgsmålet, ser godt nok lidt simplere ud end mit :D
Jeg må indrømme at min kunnen ikke strejker sig meget længere end det jeg har lavet der - har aldrig helt fanget konceptet med funktioner - altså forstår godt det smarte, men fatter ikke helt alle de ting man kan lave i dem :) Så en lille bitte smule mere hjælp, ville jeg sætte stor pris på!
Vi kan jo så starte med definationen af en "rekursiv funktion". Det er bare en funktion som kalder sig selv :o)
function doIT(fTal) if fTal <= 10 then call doIT(fTal+1) end if response.write fTal &"<br>" end function call doIT(1)
funktionen vil udskrive tallene 10 - 1. Hvis du flytter response.write op før if sætningen udskriver den tallene 1 - 10.
Man skal dog passe på med dem, da den kan løbe evigt, hvis man ikke styre dem.
Det var så dagens lektion :o)
Jeg skal nok rette menu koden, så den virker som en foldud, men jeg får nok ikke tid idag. Hvis jeg (eller andre) ikke har givet lyd inden 08:00 i morgen, så smid en kommentar herinde, så jeg får en mail om ?'et. Ellers glemmer jeg det bare :o)
Så er første udkast klar, men jeg har ikke testet det:
'Find sidens ID (skal sendes med som parameter i url'en) PageID = Request.querystring("pageID")
Function TegnMenu(ThisID,Indrykning) dim FunkRS
'select rodpunkter eller underpunkter if ThisID <> "" then 'Underpunkter set FunkRS = conn.Execute("select * from menu where pID="& ThisID) else 'Roden af menuen set FunkRS = conn.execute("select * from menu where pID is null") end if
do while not FunkRS.eof 'tegn menupunktet response.write Indrykning & "<a href=""index.asp?pageID="& FunkRS("ID") &""">"& FunkRS("menu") &"</a><br>"&chr(13) 'kald funktionen igen for at finde evt underpunkter if isParent(FunkRS("ID")) then TegnMenu FunkRS("id"),Indrykning&" " end if FunkRS.MoveNext loop End function
function isParent(fID) dim fORS if not (isnumeric(PageID&"") and isnumeric(fID&"")) then isParent = false else if fID&"" = PageID&"" then isParent = true else set fORS = conn.execute("select pID from menu where id="& PageID) isParent = isParentSub(fID,fORS("pID")) end if end if end function
function isParentSub(fID,fPageID) dim fORS if not isnumeric(fPageID&"") then isParentSub = false else if fID&"" = fPageID&"" then isParentSub = true else set fORS = conn.execute("select pID from menu where id="& fPageID) isParentSub = isParentSub(fORS("pID")) end if end if end function
Læg mærke til disse to linjer: PageID = Request.querystring("pageID") ... response.write Indrykning & "<a href=""index.asp?pageID="& FunkRS("ID") &""">"& FunkRS("menu") &"</a><br>"&chr(13)
Det er nu vigtigt at sende sidens ID med på links, så man ved hvilken side man er på.
Altså det som mit eksempel ikke kan er følgende: Den kan godt expande en menu og sætte en undermenu ind. Men når man klikker på et underpunkt går den tilbage til hovedmenuen...
Man kan så heller ikke have undermenuer til en undermenu. Men det kan vi måske tage til sidst - det vigtigste er mit første problem :)
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.