webForumDet fria alternativet

Hjälp med med modifiering utav kod

ASP

7 svar · 482 visningar · startad av calson

Medlem sedan dec. 2003487 inlägg
Frågan#1

Hej!

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("&nbsp;&nbsp;&nbsp;&nbsp;")
	    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
  
%>

Tack på förhand

Medlem sedan dec. 2003487 inlägg
#2

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?

Medlem sedan dec. 2003487 inlägg
#3

igen som har tid och lust att komma med lite trix?

Medlem sedan dec. 2003487 inlägg
#4

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?

Medlem sedan dec. 19996 721 inlägg
#5

Gör en funktion som du anropar rekursivt.

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
Medlem sedan dec. 2003487 inlägg
#6

Jag gjorde ett test med din kod för att lista alla med intRefID=1 men fick fel vid objRs.Movenext

Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.

response.write("<ul>" & vbNewLine & _
"")

GetMenuItems 1,1

sub GetMenuItems(parentId,level)
  strSql=("Select ID, strName, strAlt, intSubNr From tblAnonsMenu Where intRefID=" & parentId)
  set objRs = objConr.Execute(strSql)

  do until objRs.EOF
    response.write("<li>" & objRs("strName") & "</li>" & vbNewLine & _
    "")
    GetMenuItems objRs("ID"),level+1
    [b]objRs.Movenext[/b]
  loop

end sub

response.write("</ul>" & vbNewLine & _
"")

Tack för ditt kodexempel. Nu känns det som jag kommit igång.

Jag ska försöka pilla med din kodsnutt och försöka förstå mig på den bättre men lite mer hjälp på vägen uppskattas :)

Medlem sedan dec. 19996 721 inlägg
#7

Sorry, glömte att dimma objRs

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
Medlem sedan dec. 2003487 inlägg
#8

Tack så mycket.
Nu börjar det likna något :)

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)