关于生成目录树结构的类
来源:岁月联盟
时间:2003-07-11
1。test.asp 调用类生成树 代码如下<br>
<%@ Language=VBScript %><br>
<html><br>
<head><br>
<link rel="stylesheet" href="tree.css"><br>
<title>tree</title><br>
</head><br>
<!-- #include file="tree.asp" --><br>
<%<br>
<br>
'========================================<br>
' BUILDING A TREE PROGRAMATICALLY<br>
'========================================<br>
' This approach would be best suited for building<br>
' dynamic trees using For..Next loops and such.<br>
<br>
Set MyTree2 = New Tree<br>
MyTree2.Top = 10<br>
MyTree2.Left = 10<br>
MyTree2.ExpandImage = "plus.gif"<br>
MyTree2.CollapseImage = "minus.gif"<br>
MyTree2.LeafImage = "webpage.gif"<br>
<br>
' Notice the indentation used to reprensent the hierarchy<br>
Set Node1 = MyTree2.CreateChild("script")<br>
Set SubNode1 = Node1.CreateChild("server")<br>
Set secSubNode1 = SubNode1.CreateChild("html")<br>
secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">asp</A>"<br>
secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">php</A>"<br>
secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">jsp</A>"<br>
<br>
Set SubNode2 = Node1.CreateChild("os")<br>
SubNode2.CreateChild "<A HREF=""#"">winnt</A>"<br>
SubNode2.CreateChild "<A HREF=""#"">win2000</A>"<br>
<br>
Set Node2 = MyTree2.CreateChild("Desktop")<br>
Node2.CreateChild "<A HREF=""#"">Area Code Lookup</A>"<br>
Node2.CreateChild "<A HREF=""#"">Arin Based Whois Search</A>"<br>
Node2.CreateChild "<A HREF=""#"">World Time Zone Map</A>"<br>
<br>
MyTree2.Draw()<br>
<br>
Set MyTree2 = Nothing<br>
<br>
%><br>
<br>
</BODY><br>
</HTML><br>
2。tree.asp 类的定义 代码如下<br>
<%<br>
'******************************************************<br>
' Author: Jacob Gilley<br>
' Email: avis7@airmail.net<br>
' My Terms: You can use this control in anyway you see fit<br>
' cause I have no means to enforce any guidelines<br>
' or BS that most developers think they can get<br>
' you to agree to by spouting out words like <br>
' "intellectual property" and "The Code Gods".<br>
' - Viva la Microsoft!<br>
'******************************************************<br>
<br>
Dim gblTreeNodeCount:gblTreeNodeCount = 1<br>
<br>
Class TreeNode<br>
<br>
Public Value<br>
Public ExpandImage<br>
Public CollapseImage<br>
Public LeafImage<br>
Public Expanded<br>
Private mszName<br>
Private mcolChildren<br>
Private mbChildrenInitialized<br>
<br>
Public Property Get ChildCount()<br>
ChildCount = mcolChildren.Count<br>
End Property<br>
<br>
Private Sub Class_Initialize()<br>
mszName = "node" & CStr(gblTreeNodeCount)<br>
gblTreeNodeCount = gblTreeNodeCount + 1<br>
<br>
mbChildrenInitialized = False<br>
Expanded = False<br>
End Sub <br>
<br>
Private Sub Class_Terminate()<br>
If mbChildrenInitialized And IsObject(mcolChildren) Then<br>
mcolChildren.RemoveAll()<br>
Set mcolChildren = Nothing<br>
End If<br>
End Sub<br>
<br>
Private Sub InitChildList()<br>
Set mcolChildren = Server.CreateObject("Scripting.Dictionary")<br>
mbChildrenInitialized = True<br>
End Sub<br>
<br>
Private Sub LoadState()<br>
If Request(mszName) = "1" Or Request("togglenode") = mszName Then<br>
Expanded = True<br>
End If<br>
End Sub<br>
<br>
Public Function CreateChild(szValue)<br>
<br>
If Not mbChildrenInitialized Then InitChildList()<br>
<br>
Set CreateChild = New TreeNode<br>
CreateChild.Value = szValue<br>
CreateChild.ExpandImage = ExpandImage<br>
CreateChild.CollapseImage = CollapseImage<br>
CreateChild.LeafImage = LeafImage<br>
<br>
mcolChildren.Add mcolChildren.Count + 1, CreateChild<br>
<br>
End Function<br>
<br>
Public Sub Draw()<br>
<br>
LoadState()<br>
<br>
Response.Write "<table border=""0"">" & vbCrLf<br>
Response.Write "<tr><td>" & vbCrLf<br>
<br>
If Expanded Then<br>
Response.Write "<a href=""javascript:collapseNode('" & mszName & "')""><img src=""" & CollapseImage & """ border=""0""></a>" & vbCrLf<br>
ElseIf Not mbChildrenInitialized Then<br>
Response.Write "<img src=""" & LeafImage & """ border=0>" & vbCrLf<br>
Else<br>
Response.Write "<a href=""javascript:expandNode('" & mszName & "')""><img src=""" & ExpandImage & """ border=""0""></a>" & vbCrLf<br>
End If<br>
<br>
Response.Write "</td>" & vbCrLf<br>
Response.Write "<td>" & Value & "</td></tr>" & vbCrLf<br>
<br>
If Expanded Then<br>
Response.Write "<input type=""hidden"" name=""" & mszName & """ value=""1"">" & vbCrLf<br>
<br>
If mbChildrenInitialized Then<br>
Response.Write "<tr><td> </td>" & vbCrLf<br>
Response.Write "<td>" & vbCrLf<br>
<br>
For Each ChildNode In mcolChildren.Items<br>
ChildNode.Draw()<br>
Next<br>
<br>
Response.Write "</td>" & vbCrLf<br>
Response.Write "</tr>" & vbCrLf<br>
End If<br>
End If<br>
<br>
Response.Write "</table>" & vbCrLf<br>
<br>
End Sub<br>
<br>
End Class<br>
<br>
<br>
Class Tree<br>
<br>
Public Top<br>
Public Left<br>
Public ExpandImage<br>
Public CollapseImage<br>
Public LeafImage<br>
Private mszPosition<br>
Private mcolChildren<br>
<br>
Public Property Let Absolute(bData)<br>
If bData Then mszPosition = "absolute" Else mszPosition = "relative"<br>
End Property<br>
<br>
Public Property Get Absolute()<br>
Absolute = CBool(mszPosition = "absolute")<br>
End Property<br>
<br>
Private Sub Class_Initialize()<br>
Set mcolChildren = Server.CreateObject("Scripting.Dictionary")<br>
mnTop = 0<br>
mnLeft = 0<br>
mszPosition = "absolute"<br>
End Sub <br>
<br>
Private Sub Class_Terminate()<br>
mcolChildren.RemoveAll()<br>
Set mcolChildren = Nothing<br>
End Sub<br>
<br>
Public Function CreateChild(szValue)<br>
<br>
Set CreateChild = New TreeNode<br>
<br>
CreateChild.Value = szValue<br>
CreateChild.ExpandImage = ExpandImage<br>
CreateChild.CollapseImage = CollapseImage<br>
CreateChild.LeafImage = LeafImage<br>
<br>
mcolChildren.Add mcolChildren.Count + 1, CreateChild<br>
<br>
End Function<br>
<br>
Public Sub LoadTemplate(szFileName)<br>
Dim objWorkingNode<br>
Dim colNodeStack<br>
Dim fsObj, tsObj<br>
Dim szLine<br>
Dim nCurrDepth, nNextDepth<br>
<br>
Set colNodeStack = Server.CreateObject("Scripting.Dictionary")<br>
Set fsObj = CreateObject("Scripting.FileSystemObject")<br>
Set tsObj = fsObj.OpenTextFile(szFileName, 1)<br>
<br>
nCurrDepth = 0<br>
While Not tsObj.AtEndOfLine<br>
nNextDepth = 1<br>
szLine = tsObj.ReadLine()<br>
<br>
If nCurrDepth = 0 Then<br>
Set objWorkingNode = CreateChild(Trim(szLine))<br>
nCurrDepth = 1<br>
Else<br>
While Mid(szLine,nNextDepth,1) = vbTab Or Mid(szLine,nNextDepth,1) = " "<br>
nNextDepth = nNextDepth + 1<br>
WEnd<br>
<br>
If nNextDepth > 1 Then szLine = Trim(Mid(szLine,nNextDepth))<br>
<br>
If szLine <> "" Then<br>
If nNextDepth > nCurrDepth Then<br>
If colNodeStack.Exists(nCurrDepth) Then<br>
Set colNodeStack.Item(nCurrDepth) = objWorkingNode<br>
Else<br>
colNodeStack.Add nCurrDepth, objWorkingNode<br>
End If<br>
<br>
Set objWorkingNode = objWorkingNode.CreateChild(szLine)<br>
<br>
nCurrDepth = nCurrDepth + 1<br>
ElseIf nNextDepth <= nCurrDepth Then<br>
<br>
If nNextDepth > 1 Then <br>
<br>
nNextDepth = nNextDepth - 1<br>
While Not colNodeStack.Exists(nNextDepth) And nNextDepth > 1<br>
nNextDepth = nNextDepth - 1<br>
WEnd<br>
<br>
Set objWorkingNode = colNodeStack.Item(nNextDepth)<br>
Set objWorkingNode = objWorkingNode.CreateChild(szLine)<br>
<br>
nNextDepth = nNextDepth + 1<br>
Else<br>
Set objWorkingNode = CreateChild(szLine)<br>
End If<br>
<br>
nCurrDepth = nNextDepth<br>
End If<br>
End If<br>
<br>
End If<br>
WEnd<br>
<br>
tsObj.Close()<br>
Set tsObj = Nothing <br>
Set fsObj = Nothing<br>
<br>
colNodeStack.RemoveAll()<br>
Set colNodeStack = Nothing<br>
<br>
End Sub<br>
<br>
<br>
Public Sub Draw()<br>
<br>
AddClientScript()<br>
<br>
Response.Write "<div id=""treectrl"" style=""left: " & Left & "px; top: " & Top & "px; position: " & mszPosition & ";"">" & vbCrLf<br>
Response.Write "<form name=""treectrlfrm"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """ method=""get"">" & vbCrLf<br>
Response.Write "<table border=""0"">" & vbCrLf<br>
Response.Write "<tr><td>" & vbCrLf<br>
<br>
For Each ChildNode In mcolChildren.Items<br>
ChildNode.Draw()<br>
Next<br>
<br>
Response.Write "</td></tr>" & vbCrLf<br>
Response.Write "</table>" & vbCrLf<br>
<br>
Response.Write "<input type=""hidden"" name=""togglenode"" value="""">" & vbCrLf<br>
Response.Write "</form>" & vbCrLf<br>
Response.Write "</div>" & vbCrLf<br>
<br>
End Sub<br>
<br>
Private Sub AddClientScript()<br>
%><br>
<script language="JavaScript"><br>
<br>
function expandNode(szNodeName)<br>
{<br>
if(document.layers != null) {<br>
document.treectrl.document.treectrlfrm.togglenode.value = szNodeName;<br>
document.treectrl.document.treectrlfrm.submit();<br>
}<br>
else {<br>
document.all["treectrlfrm"].togglenode.value = szNodeName;<br>
document.all["treectrlfrm"].submit();<br>
}<br>
}<br>
<br>
function collapseNode(szNodeName)<br>
{<br>
if(document.layers != null) {<br>
document.treectrl.document.treectrlfrm.elements[szNodeName].value = -1;<br>
document.treectrl.document.treectrlfrm.submit();<br>
}<br>
else {<br>
document.treectrlfrm.elements[szNodeName].value = -1;<br>
document.treectrlfrm.submit();<br>
}<br>
}<br>
<br>
</script><br>
<% <br>
End Sub<br>
<br>
End Class<br>
<br>
%><br>
演示地址:http://www.cnaspol.com/templatetree/test.asp