Avatar billede psyclown Nybegynder
22. marts 2004 - 19:23 Der er 1 kommentar og
1 løsning

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 "&nbsp;&nbsp;> <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 "&nbsp;&nbsp;&nbsp;&nbsp;- <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 "&nbsp;&nbsp;> <a href=""?MenuId="& strMenuId &"&ParentId="& rsParents("menu_id") &""">"& rsParents("name") &"</a><br>"& vbCrLf
                    else
                        Response.Write "&nbsp;&nbsp;- <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 &"&nbsp;&nbsp;"
                            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!
Avatar billede wan31 Nybegynder
22. marts 2004 - 22:50 #1
Øhhh...
Hehe, ikke HELT mit område endnu. Er stadig ved at lære det pis, meeeen sådan som mine amatør øjne ser, så prøver du at skrive BuildMenu(arrRecords) før koden er afviklet....

if not rsMenu.eof then
    arrRecords = rsMenu.getrows()
    Response.Write BuildMenu(arrRecords) & vbCrLf
end if

Du beder den lave en Response.Write på BuildMenu(arrRecords)....Men den er jo ikke lavet endnu. Den bliver først afviklet længere nede.

Svare jo lidt til

Response.Write strTest
strTest = ""

Der skulle det jo være

strTest = ""
Response.Write strTest
Avatar billede psyclown Nybegynder
24. marts 2004 - 19:42 #2
har fundet en løsning
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