Jag använder mig utav ett meny script jag hittade här på forumet som jag modifierat lite. Hur som helst så ser databasbyggnaden ut såhär
id - menyalternativets id (doh)
namn - namnet som syns när menyn skrivs ut (doh*2)
belongto - ifall menyalternativet är undermeny till något annat alternativ så står det alternativets id här, annars 0.
folder - Innehåller en 1 eller 0 som visar på om alternativet endast är en innehållare åt andra alternativ eller om den kan vara både och. (denna kan ni ignorera egentligen)
Nu det jag vill göra är att skriva ut alla menyalternativ i en select ungefär såhär
Om du använder dig av SQLServer så skulle jag byggt en SP som hämtar ut alla items med en extra kolumn: itemLevel. Som visar på vilken nivå i strukturen ett item ligger. För att göra dett så skapar man en temptabell som man insertar item i flera steg. Kan visa i sql om så behövs.
Är det bara två nivåer på menyn så kan du köra en UNION på två select satser, en för root-nivå items och en för dess underliggande items och sortera på belongto.
Annars kan du skriva en rekursiv function som responsar ut option-taggar. nackdelen är att man få hämta item i flera omgångar.
Använder mysql =/ tycker väll att det borde gå o hämta ut alla o sedan sortera dom så dom hamnar i rätt ordning o skriva ut.. eller nått.. :D har ju sett detta göras på så många sidor.
Och dom gör ju det i scriptet när dom skriver ut menyn..
Har du flera nivåer? Är det bara en nivå nedåt bör du kunna göra så här:
hämta alla där belongto=0
börja loopa
anropa databasen och hämta alla som har belongto=aktuellt id
loopa igenom och skriv ut alla underkategorier
avsluta loopen
Mjo tyvärr kan jag inte garantera att det bara kommer vara 2 nivåer :( har försökt modifiera koden i macce linktree för den gör ju ungefär så som jag vill bara det att alla undernivåer inte visas och att den skriver ut länkar och inte options.. hmm med andra ord inte alls samma och inte heller så optimalt antagligen.. men jag lyckades hur som helst inte så jag vände mig hit..
Den fungerar utmärkt och gör exakt det jag vill ha gjort.
bara ett problem, den måste ju markera att det är undermenyer på något vis. Jag får bara inte till det.
Tror jag lyckats markera dom mest konstiga kombinationerna utan just underkategorina.
Sub PrintTree(intParent)
strSQL = "SELECT id, me_belongto, me_namn FROM meny WHERE me_belongto = " & intParent
Set objRubrik = objConn.Execute(strSQL)
Do Until objRubrik.EOF
strSQL = "SELECT me_belongto FROM meny WHERE me_belongto = " & objRubrik(0)
Set objNode = objConn.Execute(strSQL)
If NOT objNode.EOF Then
Response.Write("<option>" & objRubrik(2) & "</option>")
PrintTree objNode(0)
Else
Response.Write("<option>" & objRubrik(2) & "</option>")
End If
objNode.Close : Set objNode = Nothing :
objRubrik.MoveNext
Loop
objRubrik.Close : Set objRubrik = Nothing
End Sub
PrintTree 0
objConn.Close : Set objConn = Nothing
JAAAAAAAAAAAAAa!!!!
jag löste det, fy helvete vad bra jag är ;D
response.write "<select>"
call dbopen(connect)
Sub PrintTree(intParent,intSub)
MySQL = "SELECT id, me_belongto, me_namn FROM meny WHERE me_belongto = " & intParent & " Order by me_namn"
Set objRubrik = connect.Execute(MySQL)
Do Until objRubrik.EOF
MySQL = "SELECT me_belongto FROM meny WHERE me_belongto = " & objRubrik(0)
Set objNode = connect.Execute(MySQL)
if intSub = 1 then
strSub = "-"
else
strSub = ""
end if
If NOT objNode.EOF Then
Response.Write("<option>" & objRubrik(2) & "</option>")
PrintTree objNode(0), 1
Else
Response.Write("<option>"& strSub & objRubrik(2) & "</option>")
End If
objNode.Close : Set objNode = Nothing :
objRubrik.MoveNext
Loop
objRubrik.Close : Set objRubrik = Nothing
End Sub
PrintTree 0, 0
call dbclose(connect)
response.write "</select>"
258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e