Avatar billede bjorn82dk Nybegynder
12. december 2003 - 19:20 Der er 9 kommentarer og
1 løsning

Tree menu - ASP - DB

Well til at starte med så har jeg allerede kigget 100 vis af indlæg igennem omkring dette emne, men de fleste er nogle som viser en del af et script eller noget som ikke helt er det jeg søger... derfor håber jeg at det er okay at oprette endnu et indlæg omkring dette emne.

Nå er igang med at lave en hjemmeside med frames... derfor vil der være en left frame og en right frame. Left skulle jeg gerne have en menu, men det skal være en menu der er hurtig og nem at opdaterer og smide flere punkter/underpunkter ind i.

Det jeg godt kunne tænke mig var noget asp med en database, så kan jeg blot opdaterer databasen og så skulle scriptet gerne læse ændringerne selv.

Selve strukturen må gerne være noget i denne stil:



Menu

Menu
- Undermenu
- Undermenu
  -- Side 1
  -- Side 2
- Undermenu

Menu
Side 1
Side 2
Side 3

Menu

Menu

Nå det er jo nok til at forstå nogen lunde... må jo tilstå at de fleste af de svar jeg har læst indtil nu virker meget prof.

Men... og nu bliver det måske lidt små avanceret... undermenuer og sider skal først vises i det øjeblik der klikkes på menuen.

Da ASP ikke er min helt stærke side (endnu) ville det være utrolig rart hvis jeg kunne få lov at se hele scriptet. Script til at redigerer i databasen skal jeg nok selv få lavet, det er knapt så vigtigt.

På forhånd tak for hjælpen!

Mange hilsner

Bjørn
Avatar billede eagleeye Praktikant
12. december 2003 - 23:53 #1
Der findes som du selv siger rigtig mange forskellige script og jeg kan da vise et eks jeg har.

Det består af 3 tabeller som har dette layout:

Tabelnavn: aa_menu
id : autonummer
menunavn : tekst

Tabelnavn: aa_submenu
id : autonummer
menuid : tal      -> ref til id i aa_menu
submenunavn : tekst

Tabelnavn: aa_link
id : autonummer
menuid : tal      -> ref til id i aa_menu
submenuid : tal  -> ref til id i aa_submenu
linknavn : tekst 
linket : tekst


Hvis et link (Side 3) ikke har en submenu skal submenuid være lig med 0 og så skal menuid være lige den menu som linket høre til.
Hvis et link har en submenu skal menuID være lig 0.



<%
set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db10.mdb")

menuID = Replace(Request.QueryString("id"),"'","")
submenuID = Replace(Request.QueryString("sid"),"'","")

SQL = "SELECT * FROM aa_menu ORDER BY id"
Set rs = Conn.Execute(SQL)

do while not rs.EOF
  Response.Write "<a href=""?id=" & rs("id") & """>" & rs("menunavn") & "</a>"
  Response.Write "<br>"
 
  if Int("0" & menuID) = Int(rs("id")) then 
    'Udskriver submenuer til den valgte menu
    Set subrs = Conn.Execute("SELECT * FROM aa_submenu WHERE menuID = " & rs("id"))
    do while not subrs.EOF
      Response.Write " - <a href=""?id=" & rs("id") & "&sid=" & subrs("id") & """>" & subrs("submenunavn") & "</a>"
      Response.Write "<br>"
      if Int("0" & submenuID) = Int(subrs("id")) then 
        'Udskriver links til den valgte menu og submenu
        Set linksrs = Conn.Execute("SELECT * FROM aa_link WHERE submenuID = " & rs("id"))
        do while not linksrs.EOF
          Response.Write " -- " & linksrs("linknavn")
          Response.Write "<br>"
          linksrs.Movenext
        loop   
      end if
      subrs.Movenext
    loop   

    'Udskriver links til den valgte menu som ikke har en submenu
    Set subrs = Conn.Execute("SELECT * FROM aa_link WHERE menuID = " & rs("id"))
    do while not subrs.EOF
      Response.Write " -- " & subrs("linknavn")
      Response.Write "<br>"
      subrs.Movenext
    loop   
  end if

  rs.Movenext
loop

Conn.Close
Set Conn = nothing
%>
Avatar billede guro.not Nybegynder
13. december 2003 - 10:37 #2
Hejsa...
Lavede denne for lang tid siden, og den virker..

Asp delen.
<%
Function FindSubC(rs, Parent, u)
    Dim rsWhere
    Dim intPos

    rs.MoveFirst
    intPos = 1

    Do While Not rs.EOF
        If CInt(rs("Parent")) = Parent Then
            response.write String(u,"+") & " ID: " & rs("ID") & " - Parent: " & Parent & " - u: " & u & "<br>"
            Response.Flush

            FindSubC rs, CInt(rs("ID")), u+1

            rs.Move intPos-1, 1
        End If

        intPos = intPos +1
        rs.MoveNext
    Loop
End Function

'Create database connection

Set Conn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../database/menu-test.mdb")
Conn.Open strDSN
strSQL = "SELECT * FROM Categories"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, Conn, 1, 1

FindSubC rs, 0, 0

rs.close
Conn.Close
Set rs = Nothing
Set Conn = Nothing
%>

Databasen. Gem som csv og opret en ny access db og impoter.

ID;Name;Description;Parent
2;Videofilm;Mangler du en god film til en kold regnvejrsaften? Så kig her og find lige netop den film du gerne vil se.;0
3;Computerspil;Alle som interesserer sig for computerspil kan ganske sikkert finde noget interessant her.;0
4;Bøger;Hvis du godt kan lide at læse bøger er dette måske lige stedet for dig.;0
6;Bilspil;;3
7;Strategispil;;3
8;Sportsspil;;3
12;Bøger om mad og drikke;;4
13;Computerbøger;;4
14;Ordbøger;;4
15;Bøger om programmering;;13
16;Computerbøger for begyndere;;13
17;Bøger om Active Server Pages;;15
18;Bøger om C++;;15
19;Bøger om HTML / JavaScript;;15
20;Actionfilm;;2
21;Dramafilm;;2
22;Komediefilm;;2
23;Dokumentarfilm;;2
25;Action GameZ";GameZ, GameZ and more GameZ\;3


den generer følgende..

ID: 2 - Parent: 0 - u: 0
+ ID: 20 - Parent: 2 - u: 1
+ ID: 21 - Parent: 2 - u: 1
+ ID: 22 - Parent: 2 - u: 1
+ ID: 23 - Parent: 2 - u: 1
ID: 3 - Parent: 0 - u: 0
+ ID: 6 - Parent: 3 - u: 1
+ ID: 7 - Parent: 3 - u: 1
+ ID: 8 - Parent: 3 - u: 1
+ ID: 25 - Parent: 3 - u: 1
ID: 4 - Parent: 0 - u: 0
+ ID: 12 - Parent: 4 - u: 1
+ ID: 13 - Parent: 4 - u: 1
++ ID: 15 - Parent: 13 - u: 2
+++ ID: 17 - Parent: 15 - u: 3
+++ ID: 18 - Parent: 15 - u: 3
+++ ID: 19 - Parent: 15 - u: 3
++ ID: 16 - Parent: 13 - u: 2
+ ID: 14 - Parent: 4 - u: 1

Guro.Not
Avatar billede bjorn82dk Nybegynder
13. december 2003 - 13:02 #3
Hej til jer begge.
Jeg prøver at kigge på begge jeres ideer. Må indrømme at jeg ikke kan gøre det lige nu og her da jeg endnu ikke har mit webhotel på plads, men regner med at oprette det så det virker omkring 1/2-04. Dog er jeg næsten sikker på at begge jeres scripter virker.
Har ladet mig fortælle at selve ideen er meget simpel - jeg kunne bare ikke lige få hul på den.

Et lille side spørgsmål helt uden for kategorien. Er det min PC der ikke arbejder særlig godt sammen med eksperten.dk eller har de lagt nogle totalt fucked up scripts ind på denne side? Når jeg skal skrive kommentare tager det ca. 2 sekunder per tegn jeg skriver????
Avatar billede eagleeye Praktikant
13. december 2003 - 13:08 #4
Angående det sidste, så har jeg ikke det problem. Det er lige som at skrive i notepad eller word.. Lige så snart jeg trykke på en knap kommer kaarakteren frem. Måske det er PCen eller browseren.
Avatar billede bjorn82dk Nybegynder
17. december 2003 - 17:09 #5
Eagleey.

Hmm øv piv har lige kigget på den - altså strukturen virker fint, den skriver også navnet til linket men den linker ikke til noget. Den kommer frem med navnet, men du kan ikke trykke på det. HVAD SKAL JEG GØRE?????????


Mange venlige hilsner

Bjørn
Avatar billede eagleeye Praktikant
17. december 2003 - 20:41 #6
Nej det rigtigt ikke som vist så derfor prøv lige denne kode.

Der er en variable som bestemmer hvilken frame siden skal vises i og lige nu indeholder den "MAIN" så den loader linksne i en frame som hedde "MAIN"

menu_target = "MAIN"

Du skal abre angive linket til filen i databasen som filnavet eks:  side111.asp
Så skal den fil ligge i samme folder som den koden vist her ligger i.


<html>
<head>
<body>
<%
set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db10.mdb")

menuID = Replace(Request.QueryString("id"),"'","")
submenuID = Replace(Request.QueryString("sid"),"'","")

SQL = "SELECT * FROM aa_menu ORDER BY id"
Set rs = Conn.Execute(SQL)

menu_target = "MAIN"

do while not rs.EOF
  Response.Write "<a href=""?id=" & rs("id") & """>" & rs("menunavn") & "</a>"
  Response.Write "<br>"
 
  if Int("0" & menuID) = Int(rs("id")) then 
    'Udskriver submenuer til den valgte menu
    Set subrs = Conn.Execute("SELECT * FROM aa_submenu WHERE menuID = " & rs("id"))
    do while not subrs.EOF
      Response.Write " - <a href=""?id=" & rs("id") & "&sid=" & subrs("id") & """>" & subrs("submenunavn") & "</a>"
      Response.Write "<br>"
      if Int("0" & submenuID) = Int(subrs("id")) then 
        'Udskriver links til den valgte menu og submenu
        Set linksrs = Conn.Execute("SELECT * FROM aa_link WHERE submenuID = " & rs("id"))
        do while not linksrs.EOF
          Response.Write " -- <a href=""" & linksrs("link") & """ target=""" & menu_target & """>" & linksrs("linknavn") & "</a>"
          Response.Write "<br>"
          linksrs.Movenext
        loop   
      end if
      subrs.Movenext
    loop   

    'Udskriver links til den valgte menu som ikke har en submenu
    Set subrs = Conn.Execute("SELECT * FROM aa_link WHERE menuID = " & rs("id"))
    do while not subrs.EOF
      Response.Write " -- <a href=""" & linksrs("link") & """ target=""" & menu_target & """>" & linksrs("linknavn") & "</a>"
      Response.Write "<br>"
      subrs.Movenext
    loop   

  end if

  rs.Movenext
loop

Conn.Close
Set Conn = nothing
%>
</body>
</html>
Avatar billede bjorn82dk Nybegynder
18. december 2003 - 16:32 #7
Desværre - men nu kommer der hverken link eller link tekst frem i submenuen.

ASP Fejl:
Der opstod en Microsoft VBScript-kørselsfejl fejl '800a000d'

Typer stemmer ikke overens: 'linksrs'
Avatar billede eagleeye Praktikant
18. december 2003 - 17:20 #8
arh jeg har skrevet kolonnen skulle hedde "linket" i føste indlæg:
linket : tekst

men i koden skal kolonnen hedde "link" altså uden et.
Så enten skal kolonnenavnet rettes i databasen til "link" eller skal:
linksrs("link")
Rettes til:
linksrs("linket")
Avatar billede bjorn82dk Nybegynder
19. december 2003 - 12:10 #9
Så nu virker det... har tilføjet et felt i tabellen der hedder target så man kan bruge forskellige mål.
Skal dog siges at jeg har valgt at skrive data ind i databasen med " f.eks. "www.jubii.dk" "_blank"

Mange tak for hjælpen.

<%
set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("menu2.mdb")

menuID = Replace(Request.QueryString("id"),"'","")
submenuID = Replace(Request.QueryString("sid"),"'","")

SQL = "SELECT * FROM aa_menu ORDER BY id"
Set rs = Conn.Execute(SQL)

menu_target = "MAIN"

do while not rs.EOF
  Response.Write "<a href=""?id=" & rs("id") & """>" & rs("menunavn") & "</a>"
  Response.Write "<br>"
 
  if Int("0" & menuID) = Int(rs("id")) then 
    'Udskriver submenuer til den valgte menu
    Set subrs = Conn.Execute("SELECT * FROM aa_submenu WHERE menuID = " & rs("id"))
    do while not subrs.EOF
      Response.Write " - <a href=""?id=" & rs("id") & "&sid=" & subrs("id") & """>" & subrs("submenunavn") & "</a>"
      Response.Write "<br>"
      if Int("0" & submenuID) = Int(subrs("id")) then 
        'Udskriver links til den valgte menu og submenu
        Set linksrs = Conn.Execute("SELECT * FROM aa_link WHERE submenuID = " & rs("id"))
        do while not linksrs.EOF
          Response.Write " -- <a href=" & linksrs("linket") & " target=" & linksrs("target") & """>" & linksrs("linknavn") & "</a>"
          Response.Write "<br>"
          linksrs.Movenext
        loop   
      end if
      subrs.Movenext
    loop   

    'Udskriver links til den valgte menu som ikke har en submenu
    Set subrs = Conn.Execute("SELECT * FROM aa_link WHERE menuID = " & rs("id"))
    do while not subrs.EOF
      Response.Write " -- <a href=" & subrs("linket") & " target=" & subrs("target") & """>" & subrs("linknavn") & "</a>"
      Response.Write "<br>"
      subrs.Movenext
    loop   

  end if

  rs.Movenext
loop

Conn.Close
Set Conn = nothing
%>
Avatar billede eagleeye Praktikant
19. december 2003 - 16:51 #10
Ok ;)
så får du et svar fra mig.
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