无限级分类树型菜单

环境:ASP+ACCESS 

 

'//----------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"  οnclick="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=#  οnclick='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='#'  οnclick='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、付费专栏及课程。

余额充值