Avatar billede nil.dk Nybegynder
19. marts 2001 - 13:44 Der 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å?
Avatar billede nil.dk Nybegynder
19. marts 2001 - 13:44 #1
Skal være ren ASP.. ikke noget clientside
Avatar billede nute Nybegynder
19. marts 2001 - 13:56 #2
hva er poenget med en \"dynamisk\" meny som man allikevel må utføre en servertrip for å få til å fungere ?
Avatar billede nil.dk Nybegynder
19. marts 2001 - 13:58 #3
pointen er at det skal være serverside for at få ALLE browsere med.
Avatar billede nute Nybegynder
19. marts 2001 - 14:01 #4
da forstår jeg ikke poenget med en meny som kollapser...

/nute
Avatar billede nil.dk Nybegynder
19. marts 2001 - 14:02 #5
det er sådan kunden vil have det.
Avatar billede nute Nybegynder
19. marts 2001 - 14:09 #6
merkelig kunde....sorry...det er for merkelig ønske til at jeg vil hjelpe...

/nute
Avatar billede nil.dk Nybegynder
19. marts 2001 - 14:10 #7
Jeg håber der er andre der vil så...
Avatar billede stoffer Nybegynder
19. marts 2001 - 14:10 #8
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....
Avatar billede nil.dk Nybegynder
19. marts 2001 - 14:13 #9
stoffer >> jeg ved godt at det ikke er simpelt og jeg ved at man skal til at lave noget rekursivt... men den skal nu engang laves sådan og ikke i xml.
Avatar billede nute Nybegynder
19. marts 2001 - 14:17 #10
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...

/nute
Avatar billede nil.dk Nybegynder
19. marts 2001 - 14:19 #11
nute >> du har måske ret, men det er alligevel det jeg skal bruge...
Avatar billede nute Nybegynder
19. marts 2001 - 14:35 #12
jeg forstår at det er dette du vil....jeg kommer bare med noen generelle kommentarer ;)
Avatar billede soerens Nybegynder
19. marts 2001 - 15:49 #13
Tjek denne, måske kan du bruge den:

http://www.eksperten.dk/spm/57502

/SørenS.
Avatar billede nil.dk Nybegynder
19. marts 2001 - 15:53 #14
soerens >> det ser interessant ud.. jeg tester det og vender tilbage.
Avatar billede nil.dk Nybegynder
20. marts 2001 - 02:44 #15
soerens >> Jeg har kigget nærmere på scriptet, men det output det giver kan jeg ikke selv finde ud af at omdanne til en menustruktur..

Jeg har puttet en del flere points i til dig (eller andre) hvis du kan hjælpe mig med at få lavet den menu.
Avatar billede nil.dk Nybegynder
20. marts 2001 - 11:45 #16
soerens >> ken jeg komme i kontakt med dig.. email, icq?
Avatar billede soerens Nybegynder
20. marts 2001 - 12:01 #17
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.

/SørenS.
Avatar billede nil.dk Nybegynder
20. marts 2001 - 12:56 #18
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...
Avatar billede nil.dk Nybegynder
20. marts 2001 - 12:57 #19
hmmm.. hjælper det noget at vi begge er fra Silkeborg ;o)
Avatar billede soerens Nybegynder
20. marts 2001 - 13:24 #20
Hehehe.... ja, selvfølgelig hjælper det at du er fra Silkeborg ;-)

\"Collapsing\" bør du nok lave client-side, dvs. vha. noget JavaScript.

Prøv at tjekke det her:
http://javascript.internet.com/foldertree/

Har ikke selv prøvet den, men umiddelbart ser den rimeligt simpel & flot ud.

Der skulle ikke være de store problemer med at bygge det ind i koden i det andet sp., ellers sig til.

/SørenS.

PS.: La\' være med at gi\' mig 400 point for det her, det er sgu\' for meget ;-)
Avatar billede nil.dk Nybegynder
20. marts 2001 - 13:26 #21
soerens >> Det SKAL desværre være serverside det hele..
Avatar billede soerens Nybegynder
20. marts 2001 - 14:44 #22
Den er sværd.... Nogen deadline?

/SørenS
Avatar billede nil.dk Nybegynder
20. marts 2001 - 14:46 #23
i går ;o)

Nej det er jo en opgave jeg selv må løse... den er sq svær.. jeg ville bare høre om der var nogen der uden kæmpe besvær kunne hjælpe..
Avatar billede nute Nybegynder
20. marts 2001 - 15:30 #24
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....

Avatar billede nil.dk Nybegynder
20. marts 2001 - 15:31 #25
nute >> Det er ikke det eneste argument... men det er også ligemeget... det SKAL være server side, ok?
Avatar billede nute Nybegynder
20. marts 2001 - 15:32 #26
good luck !!
Avatar billede nil.dk Nybegynder
20. marts 2001 - 15:33 #27
Tak.
Avatar billede ruderkonge Nybegynder
21. marts 2001 - 02:30 #28
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
Avatar billede soerens Nybegynder
21. marts 2001 - 08:34 #29
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?

/SørenS.
Avatar billede nil.dk Nybegynder
21. marts 2001 - 08:34 #30
ruderkonge >> menupunkterne ligger i en database og skal hentes med en løkke.
Avatar billede nil.dk Nybegynder
21. marts 2001 - 08:39 #31
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.
Avatar billede soerens Nybegynder
21. marts 2001 - 08:48 #32
Ouch! Kun en thread åben siger du?

Crap, tilbage til tegnebordet..... ;-)

/SørenS.
Avatar billede nil.dk Nybegynder
21. marts 2001 - 08:50 #33
SORRY .....

Det er mig der ikke fik formuleret spm ordentligt...
Avatar billede soerens Nybegynder
21. marts 2001 - 09:19 #34
Hmmmm, sådan her tror jeg man KAN løse den:

Din datastruktur skal se ca. således ud:

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å ;-)

/SørenS.
Avatar billede nil.dk Nybegynder
21. marts 2001 - 09:21 #35
Søren det ser rigtig lovende ud... jeg er lige midt i en anden opgave, men vender tilbage til dette efter frokost.
Avatar billede soerens Nybegynder
21. marts 2001 - 09:32 #36
Hmmm, noget gik galt med træet, jeg prøver lige UDEN mellemrum:

ID1
ID2
+ID3
++ID4
ID5

Håber alligevel det er til at forstå, og velbekomme når du kommer så langt ;-)

/SørenS
Avatar billede nil.dk Nybegynder
21. marts 2001 - 13:49 #37
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?
Avatar billede soerens Nybegynder
21. marts 2001 - 14:05 #38
Ok, koden er i 3 dele:

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 ;-)

/SørenS.
Avatar billede soerens Nybegynder
23. marts 2001 - 11:17 #39
Hva så, har du haft tid til at kigge på det? ;-)

/SørenS.
Avatar billede nil.dk Nybegynder
23. marts 2001 - 11:19 #40
Jeg har ikke glemt dig/det.. havde bare lige pludselig en anden opgave i går...

Jeg har stadig problemer med at få det til at virke.. men prøver lige noget mere.
Avatar billede soerens Nybegynder
23. marts 2001 - 11:40 #41
Np, sig til hvis der er noget jeg skal forsøge at hjælpe med ;-)

/SørenS.
Avatar billede nil.dk Nybegynder
23. marts 2001 - 11:42 #42
Jeg føler mig sq ikke særlig kompetent (som du ellers skriver ovenfor) i forbindelse med denne her...
Avatar billede bojohansen Nybegynder
25. marts 2001 - 00:51 #43
<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 Conn = Server.CreateObject(\"ADODB.Connection\")
    Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\"& Server.MapPath(\"varer.mdb\")

    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\'>&nbsp;\"& 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 & \";\")
                   
                    Do Until SubRs.EOF
                        Response.Write \"<span class=\'subcat\'>&nbsp;&nbsp;<img src=\'sub.gif\'> <a href=\'default.asp?root=\" & strRoot & \"&kat=\" & KatRs(\"id\") & \"&subkat=\" & SubRs(\"id\") & \"&showart=1\'>\" & SubRs(\"navn\") & \"</a></span><br>\" & vbCrLf                       
                       
                        SubRs.movenext
                    Loop
                End If

                KatRs.movenext
            Loop
        End If

        Rs.movenext
    Loop

    Conn.Close
    Set Conn = Nothing
%>
 
Avatar billede bojohansen Nybegynder
25. marts 2001 - 00:53 #44
Prøv at kigge lidt på den, den er faktigst ret god :-)
Avatar billede nil.dk Nybegynder
26. marts 2001 - 10:55 #45
bojohansen >> det ser godt ud... kan du sende et record-layout for databasen?
Avatar billede bojohansen Nybegynder
26. marts 2001 - 16:51 #46
Hvad er din email så skal jeg sende dig en lille DB du kan lege med
Avatar billede soerens Nybegynder
26. marts 2001 - 17:08 #47
Du må da meget gerne poste en kort beskrivelse her, så andre også ka\' følge med ;-)

Så vidt jeg kan se ud fra koden, så arbejder du med et DB layout der måske minder lidt om det vi har brugt indtil videre:

tblSomething
{
  ID int,
  Name nvarchar,
  ParentID int
}

Er det korrekt?

/SørenS
Avatar billede bojohansen Nybegynder
26. marts 2001 - 20:36 #48
Hmmmmmm det står jo egentligt ovenfor i scriptet. Kig på de forskellige conn strings og de der tilhørende Recordsets.

Download Databasen her http://www.formor.dk/neverdelete/menudb/varer.zip den bliver liggende der i et godt stykke tid.
Avatar billede nil.dk Nybegynder
27. marts 2001 - 13:23 #49
bojohansen >> det virker præcis som det jeg skal bruge...

soerens >> du har brugt så meget tid på at hjælpe mig.. og dit script var også i den rigtige retning.

Jeg vil gerne dele pointene imellem jer... hvad siger I selv..?
Avatar billede bojohansen Nybegynder
27. marts 2001 - 13:27 #50
Helt ok bare du kom videre :-)
Avatar billede nil.dk Nybegynder
27. marts 2001 - 13:30 #51
Jeg kom videre.. og lige netop denne opgave betød rigtig meget for mig.

Venter lige og hører hvad soerens siger.
Avatar billede soerens Nybegynder
27. marts 2001 - 13:35 #52
Jeg er lidt ligeglag, bojo lavede jo alt arbejdet så han skal da selvfølgelig ha\' flest

Bare gi\' mig 100 point, så hører du ikke brok fra mig af ;-)

Har du en demo et sted som man ku\' få lov at se? Det ku\' jo være man en dag fik brug for noget lignende...

/SørenS
Avatar billede nil.dk Nybegynder
27. marts 2001 - 13:38 #53
Jeg sender dig et link til en demo, når jeg har fået sat den rigtigt op med det rette udseende og den rigtige database...

vil ikke poste det her, da det er et \"fortroligt\" projekt.
Avatar billede nil.dk Nybegynder
27. marts 2001 - 13:38 #54
Tak for hjælpen begge to.
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