Jag håller på att lära mig mer om arrays och javascript därför tänkte jag göra mig ett trädmenysystem där man kan lägga till länkar via en "admin" sida. Man ska själv kunna välja hur många undermenyer det skall vara. Det ska kunna bli många menyer/undermenyer därför måste det vara en välkodad sida för prestandan. Och där behöver jag hjälp.
Nu hämtar jag ut huvudmenyerna med arrays för att slippa loopa igenom två recordset. Det känns ändå fel att behöva loopa ut undermenyerna eftersom det kan bli en lång loop.
Någon som har några ideer hur jag kan modifiera koden till det bättre?
tblMenu
ID | intSubNr | intRefID | strName | strAlt
Koden fungerar
<%
Session.LCID = 1053
Dim objConr, objRs
Dim strSql
Dim arrMenu
Dim intX
*DATABASKOPPLING*
strSql=("Select ID, strName, strAlt From tblMenu Where intSubNr=0")
Set objRs = objConr.Execute(strSql)
If Not objRs.EOF Or objRs.BOF Then : arrMenu = objRs.GetRows()
objRs.Close
If isArray(arrMenu) Then
For i = 0 To UBound(arrMenu,2)
response.write("<b>" & arrMenu(1,i) & "</b>")
strSql=("Select ID, strName, strAlt, intSubNr From tblMenu Where intRefID=" & arrMenu(0,i) & " Order By intSubNr ASC")
Set objRs = objConr.Execute(strSql)
If Not objRs.Eof Then
Do Until objRs.Eof
response.write("<br>")
For intX = 0 To int(objRs("intSubNr"))
intX = intX + 1
response.write(" ")
Next
response.write(objRs("strName"))
objRs.MoveNext
Loop
End If
objRs.Close
response.write("<br><br>")
Next
Else
response.write("Finns inga poster!")
End If
set objRs = nothing
objConr.Close : set objConr = nothing
%>
En fråga till angående detta.
Eftersom jag kommer göra ett trädsystem måste jag få alla arrays att gå baklänges så jag får dess id innan länken över. Jag har sökt här på forumet om rekursiva och arrays men kan inte förstå mig på det.
Någon som har lust att förklara och kanske tom komma med kod ex?
lite tjatigt men finns det ingen som kan hjälpa mig med att kunna skapa oändligt antal undermenyer med en snabb och effektiv kod. Är jag helt ute och cyklar kanske?
sub GetMenuItems(parentId,level)
strSql="Select ID, strName, strAlt, intSubNr From tblMenu Where intRefID=" & parentId
set objRs = objConr.Execute(strSql)
do until objRs.EOF
'skriv ut posten. Använd level för att indentera (eller kör med <li> i stället)
GetMenuItems objRs("ID"),level+1
objRs.Movenext
loop
end sub
sub GetMenuItems(parentId,level)
dim objRs
strSql=("Select ID, strName, strAlt, intSubNr From tblAnonsMenu Where intRefID=" & parentId)
set objRs = objConr.Execute(strSql)
if not objRs.EOF then
response.write("<ul>"
do until objRs.EOF
response.write("<li>" & objRs("strName"))
GetMenuItems objRs("ID"),level+1
response.write("</li>"
objRs.Movenext
loop
response.write("</ul>"
end if
end sub