webForumDet fria alternativet

Rekursiv funktion?

ASP

30 svar · 1 278 visningar · startad av Jesper T · sida 2 av 2

Frågan, av Jesper T

Försöker att skapa en "ul och li"-lista, men mina hjärnceller står still. Skulle det inte gå att utgå ifråd detta må någe vis? Sub LinkTree(intParent,intIndent) : Dim X,Z For X = 0 To Ubound(arrLinks,2) If arrLinks(1,X) = intParent then IF intIndent < 0 then Response.Write "<li>"& arrLinks(2,X) &"</ul>"& VbCrlf ELSE For Z = 1 To intIndent Response.Write

Läs frågan i sin helhet →
Medlem sedan jan. 20032 285 inlägg
#21

Jesper T skrev:

Ehhh....

"<li>" & objRubrik(2) & "</li>"

Kan ju knappast bli :

<li>Games 
<ul>

;)

Läs min redigering. ;)

Medlem sedan dec. 20003 887 inlägg
#22

Hehe... lite för snabb där Sebbe :)

Har du testat min reviderade funktion, Jesper T?

Medlem sedan nov. 20017 144 inlägg
#23

Jag labbar lite.
PrintTree objNode(0, intDepth + 1)
Skall väl vara
PrintTree objNode(0), intDepth + 1

Medlem sedan dec. 20003 887 inlägg
#24

Precis... jag såg den tabben själv :r och ändrade den...

Medlem sedan nov. 20017 144 inlägg
#25

Operation is not allowed when the object is open.

/menu/Default.asp, line 22

-->objChild.Open strSQL, objConn

Medlem sedan jan. 20032 285 inlägg
#26

Nu stör jag igen. ;)
Om det nu är så att Engine^s kod inte funkar så tror jag nog att det här är som du vill ha det:

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
intSpace = 0

Sub PrintTree(intParent)
  strSQL = "SELECT nodeId, nodeParent, nodeText FROM tblNodes WHERE nodeParent = " & intParent
  Set objRubrik = objConn.Execute(strSQL)

  Response.Write(Space(intSpace * 2) & "<ul>" & vbCrLf)
  intSpace = intSpace + 1

  Do Until objRubrik.EOF
    strSQL = "SELECT nodeParent FROM tblNodes WHERE nodeParent = " & objRubrik(0)
    Set objNode = objConn.Execute(strSQL)

    If NOT objNode.EOF Then
      Response.Write(Space(intSpace * 2) & "<li class=""toggle"">" & objRubrik(2) & vbCrLf)
      intSpace = intSpace + 1
      PrintTree objNode(0)
    Else
      Response.Write(Space(intSpace * 2) & "<li>" & objRubrik(2) & "</li>" & vbCrLf)
    End If

    objNode.Close : Set objNode = Nothing
    objRubrik.MoveNext
  Loop

  objRubrik.Close : Set objRubrik = Nothing
  intSpace = intSpace - 1

  If intSpace = 0 Then
    Response.Write("</ul>" & vbCrLf)
  Else
    Response.Write(Space(intSpace * 2) & "</ul>" & vbCrLf & Space((intSpace - 1) * 2) & "</li>" & vbCrLf)
    intSpace = intSpace - 1
  End If
End Sub

PrintTree 0

objConn.Close : Set objConn = Nothing
%>
Medlem sedan dec. 20003 887 inlägg
#27

Det tråkiga med att inte kunna testa koden är ju att det dyker upp sådana där småsaker då och då :l

Fungerar inte Sebbes variant kommer en till av min här :)

Sub PrintTree(intParent, intDepth)
  Dim objNode, objChild

  strSQL = "SELECT intNode, strNamn FROM tblTree WHERE intParent = " & intParent

  Set objNode = Server.CreateObject("ADODB.Recordset")
  Set objChild = Server.CreateObject("ADODB.Recordset")

  objNode.Open strSQL, objConn

  While Not objNode.EOF
    strSQL = "SELECT 1 FROM tblTree WHERE intParent = " & objNode(0)

    [b]If objChild.State = 1 Then objChild.Close[/b]

    objChild.Open strSQL, objConn

    If objChild.EOF Then
      Response.Write Space(intDepth * 4) & "<li>" & objNode(1) & "</li>"
    Else
      Response.Write "<li>" & Space(intDepth * 4) & "<ul>" & objNode(1)

      PrintTree objNode(0), intDepth + 1

      Response.Write "</ul></li>"
    End If

    objNode.MoveNext
  Wend

  Set objChild = Nothing
  
  objNode.Close : Set objNode = Nothing
  objConn.Close : Set objConn = Nothing
End Sub

Reponse.Write "<ul>"
PrintTree 0, 0
Response.Write "</ul>"
Medlem sedan nov. 20017 144 inlägg
#28

Ha ha,, här var det tävling!
Sebbe vann, fast Engine^, du gjorde ett bra jobb!
Tack vänner!

Medlem sedan jan. 20032 285 inlägg
#29

Weee! Vassego. :D ;)

Medlem sedan dec. 20003 887 inlägg
#30

Slagen på mållinjen :e Grattis Sebbe :)

Och ett varsågod till Jesper T :)

Medlem sedan maj 200161 inlägg
#31

Visst, nu är jag sent ute, men jag fick hjälp av det här, så jag tar och kommenterar...

Jag lägger min röst på Engine^s version då Sebbes producerar en "</li>" tag efter att listan genererats färdigt. Kan dock bero på att jag implementerat helt galet.

Sebbe, din lösning gav mig dock inspiration till annat :)

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