How do I generate a treeview from ASP?
We created this example of traversing the folder structure of a web
site or virtual directory. Before you even look at it, there are a few
notable limitations. The most important is that, rather than create a
recursive function, we limited the scope to nesting two levels deep —
both for the purposes of the example and to keep the code relatively
short. We also assume that the starting point (defined by vDir) has at
least one subfolder *or* one file. Finally, the majority of the
formatting functions are buried away in treeviewFunctions.asp, and the
code there is not as clean and pretty as it could be.
We updated the code (and the download) on May 27th, 2004 to be Mac- and Mozilla-friendly. Please let us know if you find any bugs.
Some things you might not find in other treeviews, however. Links to folders / files are active, so you can link directly to those images/files (the folders just have a default.asp that confirms the folder exists, in order to avoid "Directory Listing Denied" errors). Also, if you hover over a folder link, it tells you how many subfolders and files it contains, how large it is, and when it was last modified. Likewise, file links have a tooltip telling you their size and when they were last modified.
<img height="215" src="...
You can see this example with a limited set of folders and files at TreeView. The folder and file icons are from Yukon's SQL Server WorkBench, mainly because I am sick of looking at the icons in Windows Explorer. The file icons are all identical; you are more than welcome to customize the file icon based on file extenstion.
Okay, let's stop blabbing and show the code for the main page:
And treeviewFunctions.asp:
To run the function yourself, you will also need the js, css, and gif files. You can download the code and images in a zip file from our downloads section.
Other samples
Here are some other web sites with usable samples:
CodeProject.com
comobjects.net
DarkFalz.com
obout.com
Planet Source Code
TreeGen.com
xefteri.com
We updated the code (and the download) on May 27th, 2004 to be Mac- and Mozilla-friendly. Please let us know if you find any bugs.
Some things you might not find in other treeviews, however. Links to folders / files are active, so you can link directly to those images/files (the folders just have a default.asp that confirms the folder exists, in order to avoid "Directory Listing Denied" errors). Also, if you hover over a folder link, it tells you how many subfolders and files it contains, how large it is, and when it was last modified. Likewise, file links have a tooltip telling you their size and when they were last modified.
You can see this example with a limited set of folders and files at TreeView. The folder and file icons are from Yukon's SQL Server WorkBench, mainly because I am sick of looking at the icons in Windows Explorer. The file icons are all identical; you are more than welcome to customize the file icon based on file extenstion.
Okay, let's stop blabbing and show the code for the main page:
<html> <head> <title>TreeView</title> <link rel=stylesheet href='treeview.css'></link> </head> </html> <script language=javascript src='treeview.js'></script> <!--#include file='treeviewFunctions.asp'--> <% set fso = CreateObject("Scripting.FileSystemObject") vDir = "/foo/" root = Server.MapPath(vDir) & "\" set fold = fso.getFolder(root) ' we'll assume that the starting point is not empty ' (has at least one subfolder or one file) response.write getfoldlink("r0", "r0", fold, vDir) if fold.subfolders.count > 0 then ' counter r1c = 0 'loop through all subfolders in starting folder for each f in fold.subfolders ' another counter r1c = r1c + 1 ' concatenate local/relative path once sfoldname = root & f.name & "\" fpath = vDir & f.name & "/" set cfold = fso.getFolder(sfoldname) if cfold.subfolders.count > 0 or cfold.files.count > 0 then ' we need to make the folder a tree node response.Write getfoldlink("r1" & r1c, "r1", cfold, fpath) ' reset counter r2c = 0 for each sf in cfold.subfolders ' keep track to identify nodes by id r2c = r2c + 1 ' concatenate local/relative path once sfoldname = root & f.name & "\" & sf.name & "\" path = vDir & f.name & "/" & sf.name & "/" ' build an identifier for this node id = "r2" & r1c & "_" & r2c set sfold = fso.getFolder(sfoldname) if sfold.files.count > 0 then ' we need to make the folder a tree node response.Write getfoldlink(id, "r2", sfold, path) for each fil in sfold.files response.write getfilelink("r2a", path, fil) next response.Write "</div>" else ' this folder is not an expandable node response.write getfoldlink("", "r2", sfold, path) end if next for each fil in cfold.files ' show each file in this subfolder response.write getfilelink("r1a", fpath, fil) next response.Write "</div>" else ' this folder is not an expandable node response.Write getfoldlink("", "r1", cfold, fpath) end if next end if for each fil in fold.files ' show the files in the starting folder response.write getfilelink("r0a", vDir, fil) next response.Write "</div>" set fso = nothing %> |
And treeviewFunctions.asp:
<% function getfoldlink(d, c, f, p) if d <> "" then ' needs to be clickable getfoldlink = "<a href='#' style='cursor:hand' " & _ "onclick='flip(""" & d & """);" & _ "this.blur();return false;'>" & _ "<img id='i" & d & "' class=" & c & _ " src=plus.gif vspace=0 hspace=2 border=0>" & _ "<img src=folder.gif hspace=2 border=0></a> " & _ "<a target=_blank href=" & p & getsftitle(f) & _ ">" & f.name & "</a></div><div id='" & d & "'" & _ " display=none style='display:none'>" else ' can't be clickable getfoldlink = "<div><img id='i" & d & "' " & _ "class=" & c & " src=plus.gif vspace=0 " & _ "hspace=2 visibility=hidden style='visibility:hidden'>" & _ "<img src=folder.gif hspace=2> <a " & _ "target=_blank href=" & p & getsftitle(f) & _ ">" & f.name & "</a></div>" end if end function function getfilelink(c, fold, file) getfilelink = "<div><img class=" & c & " src=file.gif" & _ " hspace=2> <a href=" & fold & file.name & _ getfiletitle(file) & ">" & file.name & "</a></div>" end function function getfiletitle(file) getfiletitle = " title='Size: " & _ formatnumber(file.size/1024, 2, -1, 0, -1) & _ " kb" & vbCrLf & getDL(file) & "'" end function function getsftitle(fold) getsftitle = " title='" & getsfc(fold) & _ vbCrLf & getfc(fold) & _ vbCrLf & getfs(fold) & _ vbCrLf & getDL(fold) & "'" end function function getDL(o) d = o.dateLastModified getDL = "Last mod: " & formatdatetime(d, 2) & _ " " & formatdatetime(d, 3) end function function getfc(fold) getfc = fCount(fold.files.count) end function function getsfc(fold) getsfc = sfCount(fold.subfolders.count) end function function getfs(fold) getfs = "Size: " & bToMB(fold.size) end function function bToMB(b) bToMB = formatnumber(b/1024/1024, 2, -1, 0, -1) & " MB" end function function fCount(c) fCount = formatnumber(c, 0, -1, 0, -1) & " file" & _ suffix(c) end function function sfCount(c) sfCount = formatnumber(c, 0, -1, 0, -1) & _ " subfolder" & suffix(c) end function function suffix(c) if c <> 1 then suffix = "s" end function %> |
To run the function yourself, you will also need the js, css, and gif files. You can download the code and images in a zip file from our downloads section.
Other samples
Here are some other web sites with usable samples:
CodeProject.com
comobjects.net
DarkFalz.com
obout.com
Planet Source Code
TreeGen.com
xefteri.com
Fonte: http://classicasp.aspfaq.com/general/how-do-i-generate-a-treeview-from-asp.html
Nenhum comentário:
Postar um comentário