19. marts 2001 - 13:44Der er
52 kommentarer og 2 løsninger
Collapsing menu
Jeg er ved at lave en menu der kan \"kollapse\" og indeholder et uendeligt antal niveauer... er der nogen der har noget script liggende jeg kan bygge på?
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
Helt simpelt er det heller ikke at lave en kolapse menu server side, da du hele tiden skal holde øje med dit child, node og mother...lav i XML i stedet....
det er ikke spesielt vanskelig å lage det, men det er på en måte litt \"overkill\"/\"misplaced\" å lage noe med den nevnte funksjonalitet sånn som du vil ha det...
Du kan nå mig via MSN Messenger på sspcons@hotmail.com eller e-mail soren.sprogoe@inter-data.dk
Forvent ikke færdig kode, det har jeg sgu\' ikke tid til ;-) Har et arbejde der også skal passes, og der er masser af mennesker der gerne vil betale 6-700 kr. i timen for færdige løsninger, hehehe...
Mht. den anden thread/spørgsmål, så skal du bruge den kode JEG har postet. \"u\"-værdien er ret vigtig hvis du vil opbygge en ordentlig træstruktur.
soerens >> jeg har fuld forståelse for det, og ønsker ikke en \"færdig løsning\", men hvis du kan hjælpe mig godt igang med at omdanne scriptet i den anden thread til at kunne \"collapse\".. så er alle pointene dine...
du skriver at du skal ha det serverside, og ditt argument er:
\"pointen er at det skal være serverside for at få ALLE browsere med.\"
det finnes jo ufattelig mange collapsing menyer på web allerede som tar høyde for \"alle\" browsere...hvis browserkompatibilitet er ditt eneste argument, så synes jeg du selger deg kort....
response.write\"<a href=\'menu.asp?menu=1\'>menuPunkt1<br>\" if request(\"menu\") = \"1\" then response.write\"<a href=\'menu.asp?menu=\'>1underMenuPunkt1<br>\" response.write\"<a href=\'menu.asp?menu=\'>1underMenuPunkt2<br>\" end if response.write\"<a href=\'menu.asp?menu=2\'>menuPunkt2<br>\" if request(\"menu\") = \"2\" then response.write\"<a href=\'menu.asp?menu=\'>2underMenuPunkt1<br>\" response.write\"<a href=\'menu.asp?menu=\'>2underMenuPunkt2<br>\" end if response.write\"<a href=\'menu.asp?menu=3\'>menuPunkt3<br>\" if request(\"menu\") = \"3\" then response.write\"<a href=\'menu.asp?menu=\'>3underMenuPunkt1<br>\" response.write\"<a href=\'menu.asp?menu=\'>3underMenuPunkt2<br>\" end if
nil.dk >> Gud ja, skal det være database styret? Skal punkterne ligge i en database?
ruderkonge >> Hehe, eneste problem er at åbne menu-punkter ikke forbliver åbne når man trykker på et andet, og at det ikke rigtigt virker hvis du har 3 eller flere niveauer.
Det kan være jeg får lidt tid på at kigge på det idag, hvis nil altså ikke selv er kommet langt med det?
soerens >> jeg er ikke selv kommet så langt endnu så du må meget gerne kigge på det. Menupunkterne ligger i en database. Der skal kun være en thread åben ad gangen.. hvis man klikker på et andet overpunkt, skal den nuværende thread lukkes.
tblTree { ID int, ParentID int, Label varchar(20) }
Hvis vi så forestiller os følgende træ:
+ID1 +ID2 +ID3 +ID4 +ID5
Hver gang man trykker på en gren kalder du din side igen med ID\'et på grenen som parameter (fx. tree.asp?id=3)
Lad os så gå ud fra at man \"står\" på ID3.
Først skal du finde alle childs til ID3: \"SELECT * FROM tblTree WHERE ParentID=3\"
Dernæst skal du følge hele \"grenen\" ind til \"stammen\" (hihi, det skal nok blive morsomt det her ;)
rstTree = cnnDB.Execute(\"SELECT * FROM tblTree WHERE ID=3\") intParentID = rstTree(\"ParentID\") Response.Write rstTree(\"Label\") & \"<br>\"
Do While Not intParentID=0 rstTree = cnnDB.Execute(\"SELECT * FROM tblTree WHERE ID=\" & intParentID) Response.Write rstTree(\"Label\") & \"<br>\" intParentID = rstTree(\"ParentID\") Loop
Dernæst skal du udskrive alle grenene i toppen, på nær den du udskrev i ovenstående loop: strSQL = \"SELECT * FROM tblTree WHERE ParentID=0 AND ID<>\" & rstTree(\"ID\")
Noget i den stil kan man bruge, håber det er til at forstå ;-)
soerens >> jeg er bange for at jeg kunne bruge en smule mere hjælp hvis du har tid... jeg er sikker på at ovenstående er den rigtige vej at gå.... jeg kan bare ikke helt få det til at virke.. det sidste select-statement hvor skal det udskrives?
1) Finder alle childs til den gren man står på (ID4 i eksemplet).
2) Finder hele grenen man står på (ID3+2).
3) Finder alle \"top level\" grene (ID1+5)
SQL\'en du har problemer med er ikke den HELT korrekte måde at gøre det på. Jeg prøver lige at bygge lidt videre på koden:
rstTree = cnnDB.Execute(\"SELECT * FROM tblTree WHERE ID=3\") intParentID = rstTree(\"ParentID\") Response.Write rstTree(\"Label\") & \"<br>\"
Do While Not intParentID=0 rstTree = cnnDB.Execute(\"SELECT * FROM tblTree WHERE ID=\" & intParentID) strBranch = strBranch + rstTree(\"Label\") & \"<br>\" intParentID = rstTree(\"ParentID\") rstTree.MoveNext Loop
\'Save top ID of branch intMyBranch = rstTree(\"ID\")
\'Print out all top branches + expanded branch Set rstTree = cnnDB.Execute(\"SELECT * FROM tblTree\")
Do While Not rstTree.EOF If rstTree(\"ID\") = intMyBranch Then Response.Write strBranch Else Response.Write rstTree(\"Label\") & \"<br>\" End If Loop
Det skulle være en smule bedre! Sig til hvis der er noget af det du ikke forstår.... Du virker rimeligt kompetent, så jeg gidder ikke forklare det i hoved og røv ;-)
<body link=\"#0000FF\" alink=\"#FF0000\" text=\"#0000FF\" vlink=\"#0000FF\"> <% strRoot = Request(\"root\"): If strRoot = \"\" Or Not IsNumeric(strRoot) Then strRoot = -1 \' To avoid failiure in CInt() strKat = Request(\"kat\"): If strKat = \"\" Or Not IsNumeric(strKat) Then strKat = -1 \' - ditto - strSubKat = Request(\"sub\"): If strSubKat = \"\" Or Not IsNumeric(strSubKat) Then strSubKat = -1 \' - ditto -
Set Rs = Conn.Execute(\"SELECT * FROM kategorier WHERE parent=0 ORDER BY sort;\") \' Top kategorier has 0 as Parent.
Do Until Rs.EOF Select Case (Cint(strRoot) = Rs(\"id\")) Case True: Response.Write \"<img src=\'left.gif\'><a href=\'default.asp\' class=\'cat\'> \"& Rs(\"navn\") & \"</a><br>\" & vbCrLf Case False: Response.Write \"<img src=\'left.gif\'><a href=\'default.asp?root=\" & Rs(\"id\") & \"\' class=\'cat\'>\"& Rs(\"navn\") & \"</a><br>\" & vbCrLf End Select
If (Cint(strRoot) = Rs(\"id\")) Then Set KatRs = Conn.Execute(\"SELECT * FROM kategorier WHERE parent=\" & Rs(\"id\") & \";\") Set SubIDRs = Conn.Execute(\"SELECT * FROM kategorier WHERE parent=\" & KatRs(\"id\") & \";\")
Do Until KatRs.EOF Select Case CInt(KatRs(\"hassub\")) = 1 Case True: Response.Write \"<span class=\'subcat\'><img src=\'subclick.gif\'> <a href=\'default.asp?root=\" & strRoot & \"&kat=\" & KatRs(\"id\") & \"&subkat=\" & SubIDRs(\"id\") & \"\'>\" & KatRs(\"navn\") & \"</a></span><br>\" & vbCrLf Case False: Response.Write \"<span class=\'subcat\'><img src=\'items.gif\'> <a href=\'default.asp?root=\" & strRoot & \"&kat=\" & KatRs(\"id\") & \"&showart=1\'>\" & KatRs(\"navn\") & \"</a></span><br>\" & vbCrLf End Select
If (Cint(strKat) = KatRs(\"id\")) Then Set SubRs = Conn.Execute(\"SELECT * FROM kategorier WHERE parent=\" & strKat & \";\")
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.