📄 msgtree_bak.asp
字号:
<%@ Language=VBScript %>
<% Response.expires = 0%>
<!-- #include file="../u_menu.asp" -->
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<SCRIPT LANGUAGE=javascript>
<!--// --------------------------Client Code Start-------------------------------
/*
''''''''''''''''''''''''''''''''''''''''''''''
''功能:树形结构的显示(树形菜单)
''说明:该程序容易理解,算法清晰,您只需使用,无需做什么修改就可以适用于各种环境
''使用中如遇问题,请与我联系
''Version 1.0
''作者:陶建波 taojianbo@263.net
''**NEW**2001.10.10陶建波
''性能评测:
'' 以本程序所提供的算法,对处理少量的数据来说,是一种简单快捷的方法,但是如果是大量的数据呢
''比如:数据库的记录达到1k(千),1m(百万)会如何呢?如果是用来人口统计呢?
''假设树的平均层次为layer,记录数为n,则计算:
''文件大小:length=2000(附加的固定大小部分)+(layer*130+280+$)*n
'' $的大小有layer,n与实际情况决定,但一般大于100
''最后计算length,文件的大小可能是nk
''由此看来,该算法不适用与大的数据量的情况,请用户考虑好
''为了改变这种不利情况,最新的算法版本请见powertree.asp,该程序将在目前功能的基础上着重考虑性能问题
'''''''''''''''''''''''''''''''''''''''''''''''
*/
function showhide(objspan)
{
//显示,隐藏区域,达到菜单显示的目的
var temp;
eval("temp=oSpan"+objspan+".style.display");
if(temp=="none")
{
eval("oSpan"+objspan+".style.display='block'");
eval("oImg"+objspan+".src='images/close.gif'");
// eval("oImg"+objspan+".OnMouseOver=""oImg"+objspan+".src='images/pinkclose.gif'""");
// eval("oImg"+objspan+".OnMouseOut=""oImg"+objspan+".src='images/close.gif'""");
}
else
{
eval("oSpan"+objspan+".style.display='none'");
eval("oImg"+objspan+".src='images/open.gif'");
// eval("oImg"+objspan+".OnMouseOver=""oImg"+objspan+".src='images/pinkopen.gif'""");
// eval("oImg"+objspan+".OnMouseOut=""oImg"+objspan+".src='images/open.gif'""");
}
}//end function
//-----------------------------Client Code End--------------------------
//-->
</SCRIPT>
<style type="text/css">
<!--
body {font-size:9pt;
scrollbar-face-color:#dddddd;
scrollbar-shadow-color:white;
scrollbar-highlight-color:white;
scrollbar-3dlight-color:#508CFF;
scrollbar-darkshadow-color:#508CFF;
scrollbar-track-color:#FFFFFF;
scrollbar-arrow-color:#508CFF}
#treeroot {font-size:9pt;}
a:link { font-size: 9pt; color: #000000; text-decoration: none;}
a:visited { font-size: 9pt; color: #000000; text-decoration: none;}
a:hover { font-size: 9pt; color: #0000FF; background-color: #FFFFFF; text-decoration: none}
a:active { font-size: 9pt; color: #000000; background-color: #FFFFFF; text-decoration: none}
.item { font-size: 9pt}
td {font-size:9pt}
-->
</style>
</HEAD>
<BODY leftmargin=0 rightmargin=0>
<table border=1 cellspacing=0 cellpadding=0 width="740px" align=center>
<tr><td style="font-size:11pt;color:green;font-weight:600"><消息列表></td></tr>
<tr><td valign=top nowrap align=left>
<%
'''''''''''''''''''''''''''''''Server code start'''''''''''''''''''''''''''''''
function UserName(userid)
Dim sName
if Trim(userid) = Session("UserID") then
UserName = "<img border=0 src='images/I.gif'>"
exit function
end if
openrs rs, "select name from T_Employee where emp_id = " & ToSQL(userid, "Text")
if Not rs.EOF then sName = GetValue(rs, "name")
sName = Trim(sName)
if sName = "" then sName = userid
rs.close
UserName = sName
end function
dim layer,seqer,rowcount,colcount ''全局变量定义
layer=0 '''树的层次计数器,初始化为0
seqer=0 '''顺序号计数器,初始化为0
rowcount=0 '''树组的第一维数
colcount=0 '''树组的第二维数
function listchild(id)
''参数:树的根结点ID
''可变部分:
''erect.gif,blank.gif,link.gif,line.gif,open.gif,close.gif 各图片的
''说明:在本程序中作了这样的假设,你的树在数据库存储的方法为 tree{row_id,nodename,par_id,...}
''不要在未看清楚之前修改任何一条语句
''在代码中,在editable start 与editable end 之间的未可修改内容
''
''
dim parid,i,blnchild,lastobji
dim lastseqer
lastobji="" '本级的最后一个对象i值,初始化为空
parid=id '
i=0 '基数0
blnchild=false '该节点是否有子节点,初始化为false
lastseqer=0 '上一个节点的顺序号,初始化为0,及
while(i<rowcount)
dim sNodeName
sNodeName = Trim(treedata(i,1))
if len(sNodeName) > (24+layer*2) then sNodeName = left(sNodeName,20-layer*2) & "...."
if(CStr(treedata(i,2))=CStr(parid)) then
response.write("<tr>")
response.write("<td>")
lastobji=i '
if(seqer-lastseqer>1 and lastseqer<>0) then
k=lastseqer+1
Response.write("<script language=javascript>")
Response.Write("<img src='images/blank.gif' border=0 align='absmiddle'>")
while(k+1<seqer)
Response.write("oerectImg"&layer&k&".src='images/erect.gif';")
k=k+1
wend
Response.Write("</script>")
end if
j=0
' Response.Write("<img src='images/blank.gif' border=0 align='absmiddle'>")
while(j<layer)
Response.Write("<img id='oerectImg"&j&seqer&"' src='images/blank.gif' border=0 align='absmiddle'>")
'#b01# Response.Write("<img src='images/blank.gif' border=0 align='absmiddle'>")
''如果觉得垂直线之间的宽度小了,可以去掉#b01# ,#b02#两条语句的注释,同时也可以通过更改图片的大小以达目的
j=j+1
wend
' 如果层次为零,就不显示前面的link图标,而显示空白
if layer = 0 then
Response.Write("<img id='olinkImg"&parid&i&"' src='images/blank.gif' border=0 align='absmiddle'>")
else
Response.Write("<img id='olinkImg"&parid&i&"' src='images/link.gif' border=0 align='absmiddle'>")
end if
'#b02# Response.Write("<img src='images/line.gif' border=0 align='absmiddle'>")
Response.Write("<img id='oImg"&parid&i&"' style='cursor:hand' src='images/open.gif' border=0 align='absmiddle' onclick=showhide('"&parid&i&"')>")
''''''''''''''''''''''editable start'''''''''''''''''''''''''''''''''''''''
'sNodeName = sNodeName & " " & UserName(treedata(i,3)) & "<img border=0 src='images/msgfromto.gif'>" & UserName(treedata(i,4))
' while ( len(sNodeName) < (20-layer*2) )
' sNodeName = sNodeName & " "
' wend
'Response.write("<span class=item> </span><a style='cursor:hand' href='contents/" & layer & ":" & treedata(i,2) & ":" & treedata(i,0)& ":" & treedata(i,1) & "'>" & treedata(i,1)& "</a>")
Response.write("<span class=item> </span><a title='" & treedata(i,1) & "' style='cursor:hand' href='contents/" & layer & ":" & treedata(i,2) & ":" & treedata(i,0) & ":" & treedata(i,1) & "'>" & sNodeName & "</a>")
response.write("</td><td>")
Response.write("<font color='gray'>" & UserName(treedata(i,3)) & "<img border=0 src='images/msgfromto.gif'>" & UserName(treedata(i,4)))
response.write("</td><td>")
Response.write(treedata(i,5))
Response.write("</font>")
Response.write "</td></tr>"
''上面一行用户可以自行添加修改一满足实际情况。
''''''''''''''''''''''editable end'''''''''''''''''''''''''''''''''''''''
'Response.Write("<br>")
lastseqer=seqer '取值在先,递加在后,其中lastseqer是局部变量,其值不会与seqer同步
seqer=seqer+1 '顺序号加一
layer=layer+1 '进入递归,层次layer加一
Response.write("<span id='oSpan"&parid&i&"' style='display:none' >")
if(listchild(treedata(i,0))=false) then
' response.write "<tr><td>"
Response.write("<script language=javascript>oImg"&parid&i&".src='images/leaf.gif';")
Response.write("oImg"&parid&i&".onclick='';")
Response.write("oImg"&parid&i&".style.cursor='default'") ''改变光标类型
'Response.write("oImg"&parid&i&".style='cursor:nw-resize';")
Response.write("</script>")
end if
''''如果没有下一级,则修改前面的图标为close.gif
Response.write("</span>")
blnchild=true
' response.write("<td>" & treedata(i,3) & "</td>")
end if
i=i+1
wend
' response.write ("<tr><td style='display:none'>")
if( lastobji <> "" ) then
' 如果层次为零,就不显示前面的lineleaf图标,而显示空白
if layer = 0 then
Response.write("<script language=javascript>olinkImg"&parid&lastobji&".src='images/blank.gif';</script>")
else
Response.write("<script language=javascript>olinkImg"&parid&lastobji&".src='images/lineleaf.gif';</script>")
end if
end if
layer=layer-1 '退出递归,层次减一
listchild=blnchild '返回是否有子节点
end function
%>
<%
strsql="select serial, subject, parent, sender, Receiver, send_time" & _
" from T_Message" & _
" where (sender='s10072'" & _
" or serial in " & _
"(select message_serial from T_PersonalMessage where account_id = 's10072')" & _
" ) " & _
" and Message_type = 1" & _
" order by serial desc"
'response.write strsql : 'response.end
''SQL 语句书写要求:在记录集的前面三个字段必须依次为:row_id(惟一的主键)、name(菜单条显示的内容)、par_id(父节点row_id),其它根据需要输出与显示
'set conn=server.createobject("ADODB.connection")
'conn.open "infortower", "infor", "tower"
set rs=server.createobject("ADODB.Recordset")
rs.open strsql, cn, 3, 3
rs.MoveFirst
rowcount=rs.RecordCount
colcount=6 '这个值根据实际情况设定
dim treedata,i,j
redim treedata(rowcount,colcount)
rs.MoveFirst
i=0
while(not rs.EOF)
j=0
while(j<colcount)
treedata(i,j)=rs.Fields(j).Value
j=j+1
wend
rs.MoveNext
i=i+1
wend
rs.Close
set rs=nothing
'''''''初始化完毕数组
Response.write("<span id='treeroot' style='display:block' border=0>")
Response.Write("<img border=0 src='images/root.gif'> <span style='color:gray;font-weight:600;font-size:10pt'>消息树(共" & rowcount & "条消息)</span><br>")
response.write("<table border=1 cellspacing=0 cellpadding=0>")
listchild(76)
response.write("</table>")
Response.write("</span>")
''''''''''''''''''''''''''''''''Server Code END '''''''''''''''''''
cn.close
%></td>
</tr></table>
<p>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -