Avatar billede lund_dk Praktikant
16. februar 2005 - 09:35 Der er 9 kommentarer og
2 løsninger

CMS - Uendelige undersider

Jeg sidder og leger med et lille CMS system, og er ved at bygge side strukturen.
Der er sådan at jeg gerne vil lave utallige undersider. eks:

Side 1
- Side 1.1
  - side 1.1.1
    - side 1.1.1.1
      - side 1.1.1.1
Side 2
- Side 2.1
- Side 2.2

Hvordan bygger jeg min database og record set op?
Avatar billede overchord Nybegynder
16. februar 2005 - 09:52 #1
Du skal vel bare have to felter i bund og grund:
Page og Parent.

Saa er det ligegyldigt hvilket niveau du befinder dig paa.
Rent automatisk bliver Child saa bare altid = Parent & ".1"
Avatar billede mortency Nybegynder
16. februar 2005 - 09:54 #2
Hvis du har en tabell med dokumenter

DocID(id)
DocSub(bit)
DocParent(int)

<%
set adoCn = Server.CreateObject("ADODB.Connection")
adoCn.Open strConn

Set rsEntries = adoCn.Execute("SELECT DocID, DocSub, DocParent, DocTitle FROM DineDocuments ORDER BY DocPriority DESC, DocTitle ASC")

If rsEntries.EOF Then
    Response.Write "<a href=index.asp>Start | Home | Hjem</a>"
    Response.End
End if

Do
  arrID = arrID & "," & rsEntries("DocID")
  arrRE = arrRE & "," & rsEntries("DocParent")
  arrSU = arrSU & "," & rsEntries("DocTitle")
  arrSUB = arrSUB & "," & rsEntries("DocSub")
  rsEntries.MoveNext
Loop while not rsEntries.eof

arrID = Split(arrID,",")
arrRE = Split(arrRE,",")
arrSU = Split(arrSU,",")
arrSUB = Split(arrSUB,",")

Function Threads(intID,level)   
  dim m
  dim v
  dim i
  dim str
  i = 1
  For m = 1 to Ubound(arrID)
    If Cint(arrRE(m)) = Cint(intID) Then
      str=""
      for l=1 to level
        str = str & " &nbsp; &nbsp; "
      next
               
        Threads = Threads & "<br>"
               
        'Sub
        If arrSUB(m) Then
                Threads = Threads & str & "<a href=index.asp?DocID=" & arrID(m) & ">" & arrSU(m) & "</a>"
        'under doc/meny       
        Else
            Threads = Threads & str & "<a href=index.asp?DocID=" & arrID(m) & ">" & arrSU(m) & "</a>"
        End if
               
        Threads = Threads & Threads(arrID(m),level+1)     
             
    End If 
       
    i = i + 1
Next

End Function
   
rsEntries.close
Set rsEntries = Nothing
   
adoCn.Close
Set adoCn = Nothing

Response.Write (Threads(0,0))
%>
Avatar billede razser Nybegynder
16. februar 2005 - 18:08 #3
Hvad er DocSub(bit)?
Avatar billede razser Nybegynder
16. februar 2005 - 18:47 #4
Jeg kæmper lidt med samme problem til et alm. website, og har ligeledes brug for nogle hjælpsomme eksperter, så måske kan vi alle hjælpe hinanden (se evt. mit spm. på http://www.eksperten.dk/spm/591021 - hvor der også er points)

Jeg kunne godt tænke mig Niveau 1 skrevet øverst - altså udtræk fra database. F.eks.:  Home | Produkter | Kontakt | Om os

Hvis man så klikker på Produkter, skal der vises nogle underliggende menupunkter, dvs. niveau 2 for dette punkt - f.eks. i venstre side (hvor topmenuen bibeholdes). Klikkes igen på et niveau 2-punkt, hvor der er et 3. niveau vises det herefter og så fremdeles.

Hvordan vil det være muligt? Det smarte ville være, at man kun viser én ID (index.asp?ID=20)i strengen, således, at man kan linke direkte til en side fra en anden side, et sitemap eller fra en søgeresultatside, uden at skulle skrive index.asp?ID=20&sub=2 etc. - som jo næppe genereres derfra.

Samtidig vil det være smart, hvis man kunne lægge en class ind, således at det pågældende menupunkt var fremhævet, når man havde klikket på det, eller var havnet på siden fra et internt link...

Her må man kunne omskrive: str = str & " &nbsp; &nbsp; " til en class og indsætte den i a href'en: Threads = Threads & str & "<a href=index.asp?ID=" & arrID(m) & ">" & arrSU(m) & "</a>"

Håber, at nogle kan hjælpe...
Avatar billede mortency Nybegynder
16. februar 2005 - 20:51 #5
Hvad er DocSub(bit)?

Dette er det samme som True/False i access men i MS SQL.

1 = True og 0 = False
Avatar billede mortency Nybegynder
16. februar 2005 - 21:03 #6
Når du sier det med class på siden så kan det laves med css.

Under beskriver jeg hva som gjøres i menyen / Scriptet.

Tabellen Documents skal inneholde:
DocID(int)
DocSub(true/false)
DocParent(int)
DocPriority(int)
DocTitle(varchar)
DocContent(varchar)
<%
set adoCn = Server.CreateObject("ADODB.Connection")
adoCn.Open strConn

Set rsEntries = adoCn.Execute("SELECT DocID, DocSub, DocParent, DocTitle FROM DineDocuments ORDER BY DocPriority DESC, DocTitle ASC")

'Hvis et ikke er noen poster i databasen skrives dette ut....
If rsEntries.EOF Then
    Response.Write "<a href=index.asp>Start | Home | Hjem</a>"
    Response.End
End if

Do
  'Legger dataene fra spørringen i en komma separert array
  arrID = arrID & "," & rsEntries("DocID")
  arrRE = arrRE & "," & rsEntries("DocParent")
  arrSU = arrSU & "," & rsEntries("DocTitle")
  arrSUB = arrSUB & "," & rsEntries("DocSub")
  rsEntries.MoveNext
Loop while not rsEntries.eof

'Splitter alle dataene ved komma
arrID = Split(arrID,",")
arrRE = Split(arrRE,",")
arrSU = Split(arrSU,",")
arrSUB = Split(arrSUB,",")

Function Threads(intID,level)   
  dim m
  dim v
  dim i
  dim str
  i = 1
  For m = 1 to Ubound(arrID)
    If Cint(arrRE(m)) = Cint(intID) Then
      str=""
      for l=1 to level
        'Her legges et mellumrum til så menyen går innover
        str = str & " &nbsp; &nbsp; "
      next
               
        Threads = Threads & "<br>"
               
        'Hvis punktet DocSub = True i tabellen så kan man veleg hvordan denne skal skrives ut.
        If arrSUB(m) Then
                Threads = Threads & str & "<a href=index.asp?DocID=" & arrID(m) & ">" & arrSU(m) & "</a>"
        'under doc/meny dvs underpunkter     
        Else
            Threads = Threads & str & "<a href=index.asp?DocID=" & arrID(m) & ">" & arrSU(m) & "</a>"
        End if
               
        Threads = Threads & Threads(arrID(m),level+1)     
             
    End If 
       
    i = i + 1
Next

End Function
   
rsEntries.close
Set rsEntries = Nothing
   
adoCn.Close
Set adoCn = Nothing

'Skriver ut Threads
Response.Write (Threads(0,0))
%>

For info om threads kan man se en artikkel på html.dk om tråde med rekursiv funksjon.

Scriptet som jeg benytter her over har jeg lagt inn i menyen som er på dhtmcentral.com

Hvis det er noe du lurer på så post gjerne en link til side du sliter med eller en side som har en meny du gjerne vil ha, så kan jeg prøve å hjelpe deg...

//Morten
Avatar billede razser Nybegynder
16. februar 2005 - 21:04 #7
True/False for aktiv? - dvs. slået til i menuen?
Avatar billede mortency Nybegynder
16. februar 2005 - 21:06 #8
True / False for hvis punktet har underpunkter.
Avatar billede mortency Nybegynder
16. februar 2005 - 21:07 #9
Man kan også lave true / false for om punktet skal vises i menyen.
Avatar billede razser Nybegynder
16. februar 2005 - 21:28 #10
Hej Morten, vil du kunne hjælpe mig på dette spørgsmål: http://www.eksperten.dk/spm/591021
Avatar billede mortency Nybegynder
17. februar 2005 - 15:23 #11
Hva er det du egentlig lurer på? Beskrive det litt bedre...

//Morten
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