关于生成目录树结构的类
本程序有两文件test.asp 和tree.asp 还有一些图标文件
1。test.asp 调用类生成树 代码如下
<%@ language=vbscript %>
<html>
<head>
<link rel="stylesheet" href="tree.css">
<title>tree</title>
</head>
<!-- #include file="tree.asp" -->
<%
'========================================
' building a tree programatically
'========================================
' this approach would be best suited for building
' dynamic trees using for..next loops and such.
set mytree2 = new tree
mytree2.top = 10
mytree2.left = 10
mytree2.expandimage = "plus.gif"
mytree2.collapseimage = "minus.gif"
mytree2.leafimage = "webpage.gif"
' notice the indentation used to reprensent the hierarchy
set node1 = mytree2.createchild("script")
set subnode1 = node1.createchild("server")
set secsubnode1 = subnode1.createchild("html")
secsubnode1.createchild "<a href=""http://127.0.0.1/"">asp</a>"
secsubnode1.createchild "<a href=""http://127.0.0.1/"">php</a>"
secsubnode1.createchild "<a href=""http://127.0.0.1/"">jsp</a>"
set subnode2 = node1.createchild("os")
subnode2.createchild "<a href=""#"">winnt</a>"
subnode2.createchild "<a href=""#"">win2000</a>"
set node2 = mytree2.createchild("desktop")
node2.createchild "<a href=""#"">area code lookup</a>"
node2.createchild "<a href=""#"">arin based whois search</a>"
node2.createchild "<a href=""#"">world time zone map</a>"
mytree2.draw()
set mytree2 = nothing
%>
</body>
</html>
2。tree.asp 类的定义 代码如下
<%
'******************************************************
' author: jacob gilley
' email: avis7@airmail.net
' my terms: you can use this control in anyway you see fit
' cause i have no means to enforce any guidelines
' or bs that most developers think they can get
' you to agree to by spouting out words like
' "intellectual property" and "the code gods".
' - viva la microsoft!
'******************************************************
dim gbltreenodecount:gbltreenodecount = 1
class treenode
public value
public expandimage
public collapseimage
public leafimage
public expanded
private mszname
private mcolchildren
private mbchildreninitialized
public property get childcount()
childcount = mcolchildren.count
end property
private sub class_initialize()
mszname = "node" & cstr(gbltreenodecount)
gbltreenodecount = gbltreenodecount + 1
mbchildreninitialized = false
expanded = false
end sub
private sub class_terminate()
if mbchildreninitialized and isobject(mcolchildren) then
mcolchildren.removeall()
set mcolchildren = nothing
end if
end sub
private sub initchildlist()
set mcolchildren = server.createobject("scripting.dictionary")
mbchildreninitialized = true
end sub
private sub loadstate()
if request(mszname) = "1" or request("togglenode") = mszname then
expanded = true
end if
end sub
public function createchild(szvalue)
if not mbchildreninitialized then initchildlist()
set createchild = new treenode
createchild.value = szvalue
createchild.expandimage = expandimage
createchild.collapseimage = collapseimage
createchild.leafimage = leafimage
mcolchildren.add mcolchildren.count + 1, createchild
end function
public sub draw()
loadstate()
response.write "<table border=""0"">" & vbcrlf
response.write "<tr><td>" & vbcrlf
if expanded then
response.write "<a href=""javascript:collapsenode('" & mszname & "')""><img src=""" & collapseimage & """ border=""0""></a>" & vbcrlf
elseif not mbchildreninitialized then
response.write "<img src=""" & leafimage & """ border=0>" & vbcrlf
else
response.write "<a href=""javascript:expandnode('" & mszname & "')""><img src=""" & expandimage & """ border=""0""></a>" & vbcrlf
end if
response.write "</td>" & vbcrlf
response.write "<td>" & value & "</td></tr>" & vbcrlf
if expanded then
response.write "<input type=""hidden"" name=""" & mszname & """ value=""1"">" & vbcrlf
if mbchildreninitialized then
response.write "<tr><td> </td>" & vbcrlf
response.write "<td>" & vbcrlf
for each childnode in mcolchildren.items
childnode.draw()
next
response.write "</td>" & vbcrlf
response.write "</tr>" & vbcrlf
end if
end if
response.write "</table>" & vbcrlf
end sub
end class
class tree
public top
public left
public expandimage
public collapseimage
public leafimage
private mszposition
private mcolchildren
public property let absolute(bdata)
if bdata then mszposition = "absolute" else mszposition = "relative"
end property
public property get absolute()
absolute = cbool(mszposition = "absolute")
end property
private sub class_initialize()
set mcolchildren = server.createobject("scripting.dictionary")
mntop = 0
mnleft = 0
mszposition = "absolute"
end sub
private sub class_terminate()
mcolchildren.removeall()
set mcolchildren = nothing
end sub
public function createchild(szvalue)
set createchild = new treenode
createchild.value = szvalue
createchild.expandimage = expandimage
createchild.collapseimage = collapseimage
createchild.leafimage = leafimage
mcolchildren.add mcolchildren.count + 1, createchild
end function
public sub loadtemplate(szfilename)
dim objworkingnode
dim colnodestack
dim fsobj, tsobj
dim szline
dim ncurrdepth, nnextdepth
set colnodestack = server.createobject("scripting.dictionary")
set fsobj = createobject("scripting.filesystemobject")
set tsobj = fsobj.opentextfile(szfilename, 1)
ncurrdepth = 0
while not tsobj.atendofline
nnextdepth = 1
szline = tsobj.readline()
if ncurrdepth = 0 then
set objworkingnode = createchild(trim(szline))
ncurrdepth = 1
else
while mid(szline,nnextdepth,1) = vbtab or mid(szline,nnextdepth,1) = " "
nnextdepth = nnextdepth + 1
wend
if nnextdepth > 1 then szline = trim(mid(szline,nnextdepth))
if szline <> "" then
if nnextdepth > ncurrdepth then
if colnodestack.exists(ncurrdepth) then
set colnodestack.item(ncurrdepth) = objworkingnode
else
colnodestack.add ncurrdepth, objworkingnode
end if
set objworkingnode = objworkingnode.createchild(szline)
ncurrdepth = ncurrdepth + 1
elseif nnextdepth <= ncurrdepth then
if nnextdepth > 1 then
nnextdepth = nnextdepth - 1
while not colnodestack.exists(nnextdepth) and nnextdepth > 1
nnextdepth = nnextdepth - 1
wend
set objworkingnode = colnodestack.item(nnextdepth)
set objworkingnode = objworkingnode.createchild(szline)
nnextdepth = nnextdepth + 1
else
set objworkingnode = createchild(szline)
end if
ncurrdepth = nnextdepth
end if
end if
end if
wend
tsobj.close()
set tsobj = nothing
set fsobj = nothing
colnodestack.removeall()
set colnodestack = nothing
end sub
public sub draw()
addclientscript()
response.write "<div id=""treectrl"" style=""left: " & left & "px; top: " & top & "px; position: " & mszposition & ";"">" & vbcrlf
response.write "<form name=""treectrlfrm"" action=""" & request.servervariables("script_name") & """ method=""get"">" & vbcrlf
response.write "<table border=""0"">" & vbcrlf
response.write "<tr><td>" & vbcrlf
for each childnode in mcolchildren.items
childnode.draw()
next
response.write "</td></tr>" & vbcrlf
response.write "</table>" & vbcrlf
response.write "<input type=""hidden"" name=""togglenode"" value="""">" & vbcrlf
response.write "</form>" & vbcrlf
response.write "</div>" & vbcrlf
end sub
private sub addclientscript()
%>
<script language="javascript">
function expandnode(sznodename)
{
if(document.layers != null) {
document.treectrl.document.treectrlfrm.togglenode.value = sznodename;
document.treectrl.document.treectrlfrm.submit();
}
else {
document.all["treectrlfrm"].togglenode.value = sznodename;
document.all["treectrlfrm"].submit();
}
}
function collapsenode(sznodename)
{
if(document.layers != null) {
document.treectrl.document.treectrlfrm.elements[sznodename].value = -1;
document.treectrl.document.treectrlfrm.submit();
}
else {
document.treectrlfrm.elements[sznodename].value = -1;
document.treectrlfrm.submit();
}
}
</script>
<%
end sub
end class
%>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持硕编程。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!