Låt WriteMenu spotta ut <ul> / </ul>. Där i kan du då skippa att göra det om rs.EOF.
Frågan#1
Jag använder denna rekursiva funktion för att skriva ut en trevlig li/ul - meny.
Dim p, cmd, nodes
' Opens Connection
connopen
' Preper command
Set cmd = NewCommand(connection, "SELECT pageid, parent_pageid, linktext FROM pages WHERE pageid = ? ORDER BY parent_pageid")
Set p = cmd.CreateParameter("id", 3, 1, , cLng("0" & page_id))
cmd.Parameters.Append p
Set nodes = Path(cmd, p)
cmd.CommandText = "SELECT pageid, parent_pageid, linktext FROM pages WHERE parent_pageid = ? ORDER BY parent_pageid"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.open sql, connection, 0, 1
Response.Write "<ul>"& vbCrLf
'WritePath nodes
WriteMenu rs, rs("pageid"), rs("linktext"), rs("parent_pageid"), nodes, cmd, p
'Close
Set cmd = nothing
Response.Write "</ul>"& vbCrLf
'/// Functions
Function NewCommand(conn,CommandText)
Dim cmd
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandType = 1
cmd.CommandText = CommandText
cmd.Prepared = true
Set NewCommand = cmd
End function
Sub WriteMenu(rs, fldId, fldText, fldParId, Expanded, cmd, p)
If not rs.EOF Then
Dim rsSub
Set rsSub = Server.CreateObject("ADODB.Recordset")
Do Until rs.EOF
If Expanded.Exists(CStr(fldId.value)) Then
If cLng("0"& fldParId) = 0 then
Response.Write "<li class=""catlink-active""><a href=""default.asp?id=" & fldId.value & """>" & Server.HTMLEncode(fldText.Value) & "</a>"& vbCrLf &"<ul>"& vbCrLf
Else
Response.Write "<li class=""sublink-active""><a href=""default.asp?id=" & fldId.value & """>" & Server.HTMLEncode(fldText.Value) & "</a>"& vbCrLf &"<ul>"& vbCrLf
End if
p.Value = fldId.value
rsSub.Open cmd, ,0, 1
WriteMenu rsSub, rsSub(fldId.Name), rsSub(fldText.Name), rsSub(fldParId.Name), Expanded, cmd, p
rsSub.Close
Response.Write "</ul></li>"& vbCrLf
Else
If cLng("0"& fldParId) = 0 then
Response.Write "<li class=""catlink""><a href=""default.asp?id=" & fldId.value & """>" & Server.HTMLEncode(fldText.Value) & "</a></li>"& vbCrLf
Else
Response.Write "<li class=""sublink""><a href=""default.asp?id=" & fldId.value & """>" & Server.HTMLEncode(fldText.Value) & "</a></li>"& vbCrLf
End if
End If
rs.MoveNext
Loop
End If
End Sub
Resultatet blir då så här:
<ul>
<li class="catlink"><a href="default.asp?id=1">Volvo</a></li>
<li class="catlink-active"><a href="default.asp?id=2">Saab</a>
<ul>
<li class="sublink"><a href="default.asp?id=6">Fälgar</a></li>
<li class="sublink-active"><a href="default.asp?id=7">Motor</a>
<ul>
<li class="sublink"><a href="default.asp?id=10">Förgasare</a></li>
<li class="sublink-active"><a href="default.asp?id=11">Tändsystem</a>
[B] <ul>
</ul>[/B]
</li>
<li class="sublink"><a href="default.asp?id=12">Block</a></li>
</ul>
</li>
<li class="sublink"><a href="default.asp?id=8">Kaross</a></li>
<li class="sublink"><a href="default.asp?id=9">Belysning</a></li>
</ul>
</li>
<li class="catlink"><a href="default.asp?id=3">BMW</a></li>
<li class="catlink"><a href="default.asp?id=4">Mercedes</a></li>
<li class="catlink"><a href="default.asp?id=5">Volkswagen</a></li>
</ul>
Som ni ser så är det en <ul></ul> för mycket. (fetmarkerat)Vet inte varför det blir så. Hjälp önskas.
