Problemer med asp menu
Jeg er igang med at lave en asp tree menu til en shop. Først lavede jeg en simpel menu med 3 undermenuer, men jeg ville gerne lave en uendelig menu. Så jeg fandt en artikel på activedeveloper.dk omkring getrows.Nu har jeg prøvet at lave den første menu om til en funktion, som skulle lave menuen, alt efter hvormange menuer der er i databasen.
Det virker ikke lige som jeg vil have det, så jeg håber der er nogen der kan hjælpe.
databasen er således opbygget:
menu: menu_id, got_sub, parent_id, name
Her er koden til den originale menu:
strMenuId = Request.Querystring("MenuId")
strParentId = Request.Querystring("ParentId")
strSubId = Request.Querystring("SubId")
if strMenuId = "" or not isNumeric(strMenuId) then strMenuId = -1
if strParentId = "" or not isNumeric(strParentId) then strParentId = -1
if strSubId = "" or not isNumeric(strSubId) then strSub = -1
set conntemp = Server.CreateObject("ADoDB.Connection")
conntemp.open DSN
set rsMenus = conntemp.execute("select * from menu where parent_id = 0 order by name asc")
do while not rsMenus.EOF
if cInt(strMenuId) = rsMenus("menu_id") then
Response.Write "> <a href="""">"& rsMenus("name") &"</a><br>"& vbCrLf
if cInt(rsMenus("got_sub")) = 1 then
set rsParents = conntemp.execute("select * from menu where parent_id = "& rsMenus("menu_id") &" order by name asc")
do while not rsParents.EOF
if cInt(strParentId) = rsParents("menu_id") then
Response.Write " > <a href=""?MenuId="& strMenuId &""">"& rsParents("name") &"</a><br>"& vbCrLf
if cInt(rsParents("got_sub")) = 1 then
set rsChilds = conntemp.execute("select * from menu where parent_id = "& rsParents("menu_id") &" order by name asc")
do while not rsChilds.EOF
Response.Write " - <a href=""?MenuId="& strMenuId &"&ParentId="& strParentId &"&SubId="& rsChilds("menu_id") &"&ShowKat=1"">"& rsChilds("name") &"</a><br>"& vbCrLf
rsChilds.movenext
loop
end if
else
if cInt(rsParents("got_sub")) = 1 then
Response.Write " > <a href=""?MenuId="& strMenuId &"&ParentId="& rsParents("menu_id") &""">"& rsParents("name") &"</a><br>"& vbCrLf
else
Response.Write " - <a href=""?MenuId="& strMenuId &"&SubId="& rsParents("menu_id") &""">"& rsParents("name") &"</a><br>"& vbCrLf
end if
end if
rsParents.movenext
loop
end if
else
Response.Write "> <a href=""?MenuId="& rsMenus("menu_id") &""">"& rsMenus("name") &"</a><br>"& vbCrLf
end if
rsMenus.movenext
loop
Den kan ses her: http://www.cichlide-net.dk/shop/
Her er så funktionen som jeg har prøvet at lave den om til:
set conntemp = Server.CreateObject("ADoDB.Connection")
conntemp.open DSN
set rsMenu = conntemp.execute("select menu_id, got_sub, parent_id, name from menu")
if not rsMenu.eof then
arrRecords = rsMenu.getrows()
Response.Write BuildMenu(arrRecords) & vbCrLf
end if
rsMenu.Close
Set rsMenu = Nothing
function BuildMenu(arrRecords)
for i = 0 to Ubound(arrRecords)
if arrRecords(2, i) = 0 then
Response.Write "> <a href="""">"& arrRecords(3, i) &"</a><br>"& vbCrLf
if arrRecords(1, i) = 1 then
for j = 0 to Ubound(arrRecords, 2)
if cInt(arrRecords(2, j)) = arrRecords(0, i) then
strIndent = ""
intIndent = 0
for x = 0 to intIndent
strIndent = strIndent &" "
intIndent = intIndent + 1
next
Response.Write strIdent &"> <a href=""?MenuId="& arrRecords(0, i) &""">"& arrRecords(3, j) &"</a><br>"& vbCrLf
if cInt(arrRecords(1, j)) = 1 then
Response.Write strIdent &"- <a href=""?MenuId="& arrRecords(0, i) &"&ParentId="& arrRecords(2, j) &"&ChildId="& arrRecords(0, j) &"&ShowKat=1"">"& arrRecords(3, j) &"</a><br>"& vbCrLf
end if
else
if cInt(arrRecords(1, j)) = 1 then
Response.Write strIdent &"> <a href=""?MenuId="& arrRecords(0, i) &"&ParentId="& arrRecords(2, j) &""">"& arrRecords(3, j) &"</a><br>"& vbCrLf
else
Response.Write strIdent &"- <a href=""?MenuId="& arrRecords(0, i) &"&ChildId="& arrRecords(0, j) &""">"& arrRecords(3, j) &"</a><br>"& vbCrLf
end if
end if
next
end if
else
Response.Write "> <a href=""?MenuId="& arrRecords(0, i) &""">"& arrRecords(3, i) &"</a><br>"& vbCrLf
end if
next
end function
Resultatet af den, kan ses her: http://www.cichlide-net.dk/shop/test.asp
Håber der er nogen som kan se hvad jeg gør galt.
På forhånd tak!