无限级分类树型菜单

'//----------List表定义 
'Create Table List(ID AUTOINCREMENT,ParentID long,Title Text(50),Url Text(50),Flag bit,ChildNum Long,Target Text(10))
'--------------------------
-->
<style Type=Text/Css>
body,td{font-size:13px;}
a:link { color: #442200; text-decoration: none}
a:visited { color: #444400; text-decoration: none}
a:hover { color: #442200; text-decoration: underline overline; background-color: #FFFF00}
a.link1:link { color: #FF0000; text-decoration:none}
a.link1:visited { color: #FF0000; text-decoration: none}
a.link1:hover { color: #FF0000; text-decoration: none; background-color: #eeeeee}
</Style>
<!-- 有人问同一页面不同链接的不同风格怎么做,就是这里啦 -->

<!-- 添加节点表单 -->
<div align="center" id=load style="display:none;position: absolute;">
<TABLE bgcolor=ffffee width=250 Style="border:1px solid #dd8888;"><FORM METHOD=POST ACTION="" name=form1>
<tr><td align="center">添加节点</td></tr>
<TR><TD  align="center">
<INPUT TYPE="hidden" Name="ParentID">
标题:<INPUT TYPE="text" NAME="Title"><BR>
链接:<INPUT TYPE="text" NAME="Url"><BR>
目标:<INPUT TYPE="text" NAME="Target" Style="width:70px">
<Select NAME="" Style="width:75px" OnChange="JavaScript:Target.value=this.options[this.selectedIndex].value;">
<!-- 有人问用下拉列表改变文本框的值怎么做,就是这里了 -->
  <option value="">Default</option>
  <option value="Right">Right</option>
  <option value="_black">_black</option>
  <option value="_Top">_Top</option>
  <option value="_parent">_parent</option>
  <option value="_self">_self</option>
</Select>
</td></tr><tr><td align="center">
<INPUT TYPE="submit" Name="提交" value="提交">
<INPUT TYPE="Button" onclick="JavaScript:load.style.display='none'" value="取消">
</TD>
</TR></FORM>
</TABLE>
</div>
<!-- 添加节点表单结束 -->

<%
'连接数据库
set conn=server.createobject("ADODB.Connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("File.mdb")

'//----------操作分支
Action=Request("Action")
Select Case Action
     Case "Add":If Request("ParentID")<>"" Then Add
     Case "Del": Del
     Case "Open":Open
     Case Else:
End Select
'//----------显示列表
           Public List
           Set Rs=Conn.Execute("Select * From [List]")
           If Not Rs.Eof Then
                 List =Rs.GetRows
                 Max=Conn.Execute("Select Count(ParentID) From List Where ParentID=0")(0)
                 Set Rs=Nothing
                 Set Conn=Nothing
                 CheckList 0,Max,""
           Else
                 Set Rs=Nothing
                 Set Conn=Nothing
           End If
           Response.Write "<a href=# onclick='JavaScript:form1.action=""List.asp?action=Add"";form1.ParentID.value=0;load.style.left=(document.body.scrollWidth-300)/2;load.style.top=(document.body.scrollHeight)/2;load.style.display="""";'>添加根</a><BR>"
'//------------显示列表函数
FuncTion CheckList(ParentID,Cs,Str1)
     Dim j
     j=0
     For i=0 To Ubound(List,2)
           If List(1,i)=ParentID Then                  
                       Response.write(Str1)
                       If j<Cs-1 Then Str2="├" Else Str2="└"
                       If List(5,i)>0 Then Str2="<a class=Link1 href='List.asp?action=Open&Id="&List(0,i)&"'>"&Str2&"</a>"
                       If List(5,i)>0 And List(4,i)=False Then Str2="<b>"&Str2&"</b>"
                       Response.Write(Str2)

                 Response.Write "<a Href='"&List(3,i)&"' target='"&List(6,i)&"'>"&List(2,i)&"</a> "&VBcrlf
                 '添加节点链接
                 Response.Write "<a title='添加"&List(2,i)&"的子节点' href='#' onclick='JavaScript:add("&List(0,i)&");'>添加</a>"&Vbcrlf
                 Response.Write "<a Title=""删除此节点"&VBCRLF&"此节点的子节点将向上递进一层!"" href='JavaScript:Del("&List(0,i)&");'>删除</a><BR>"
                 If List(4,i)=True Then
                       If j<Cs-1 Then CheckList List(0,i),List(5,i),Str1&"┆" Else CheckList List(0,i),List(5,i),Str1&" "'关键所在,递归调用
                 End If
                 j=j+1
           End IF
     Next
End Function

'//-----------添加函数
Function Add
     Parent=CLng(Request("ParentID"))
     Title=Replace(Request("Title"),"'","''")
     Url=Replace(Request("URL"),"'","''")
     Target=Replace(Request("Target"),"'","''")
     If Title="" or Url="" Then 
           Response.Write "至少有一个必须参数没有指定值 <a href=List.asp>返回</a>"
           Response.End
           Exit Function
     End If
     Sql="Insert Into List (ParentID,Title,Url,Target) Values ("&Parent&",'"&Title&"','"&Url&"',' "&Target&"')"
     Conn.Execute(Sql)
     If Parent<>0 Then
           Sql="Update List Set ChildNum=ChildNum+1 Where ID="&Parent
           Conn.Execute(Sql)
     End IF
End Function

'//-----切换节点状态
Function Open
     Sql="Update List Set Flag=Not Flag Where ID="&Clng(Request("Id"))
     Conn.Execute(Sql)
End Function
'//-----------删除节点
Function Del
     On Error Resume Next
     Id=Clng(Request("ID"))
     ParentID=Conn.Execute("Select ParentID From List Where ID="&ID)(0)
     Num=Conn.Execute("Select Count(ID) From List Where parentID="&ID)(0)
     Conn.Execute("Update List Set ChildNum=ChildNum-1+"&Num&" Where ID="&ParentID)
     Conn.Execute("Update List Set ParentID="&ParentID&" Where ID in (Select ID From List Where ParentID="&ID&")")
     Conn.Execute("Delete From List Where ID="&ID) 
     If Err.Number<>0 Then 
           Response.Write "您做的操作无效,可能是该项已经删除!! <a href=List.asp>返回</a>"
           Response.End
     End If
End Function
%>
<SCRIPT LANGUAGE="JavaScript">
<!--
function add(ID)
{
     form1.action='List.asp?action=Add';
     form1.ParentID.value=ID;
     load.style.left=(document.body.scrollWidth-300)/2;
     load.style.top=(document.body.scrollHeight-100)/2;
     load.style.display="";//有人问控制层的隐显怎么做,就是这里啦
}
function Del(ID)
{
if(confirm('删除此节点将使此节点的子节点向上递进一层/n确定要继续吗?'))
     {window.location.href='List.asp?Action=Del&Id='+ID;}//有人问删除确认怎么做,就是这里啦}
//-->
</SCRIPT> 


--------------------------------------------------------------------------------
Create Table List(ID AUTOINCREMENT,ParentID long,Title Text(50),Url Text(50),Flag bit,ChildNum Long,Target Text(10))

直接在查询里执行就可以得到List表!!

下面是对表的说明

Id 自动编号
ParentID 长整形
Title 文本
Url 文本
Flag 布尔
ChildNum 长整形
Target 文本,允许空符串 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值