表名:MenuTree
字段
M_ID 自增
M_Name 文本
Childid 目前只是文本,长度250,也可设为备注,存储子类ID,多个ID以逗号分隔
Depth 类别深度,用于控制类别层次,也可以据此生成数组
=======================================
文件名:Conn.asp
=======================================
<%
On Error Resume Next
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.connectionstring="Provider=Microsoft.JET.OLEDB.4.0;Data Source="&Server.MapPath("MenuTree.mdb")&""
Conn.open()
IF Err then
Err.Clear
Set Conn=nothing
Response.Write "数据库链接失败"
Response.End()
End IF
Function Closeconn()
IF isobject(Conn) then
Conn.close:Set Conn=nothing
End IF
End Function
%>
========================================
文件名:MenuTree.asp
目前实现到显示,添加
========================================
<!--#include file="Conn.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="ASP无限级分类" />
<meta name="description" content="ASP无限级分类,2006-9-18" />
<meta name="Author" content="江生华">
<title>ASP无限级分类</title>
<style>
<!--
body{font-size:12px;color:#333333;line-height:20px;}
A{font-size:12px;color:#333333;text-decoration:underline;}
A:hover{font-size:12px;color:FF6600;text-decoration:underline}
#MenuList{border:1px solid #CCCCCC;background-color:#FFFFFF;margin:auto;Padding:0px;width:700px;height:30px;line-height:30px;}
#Menu{border:1px solid #EEEEEE;background-color:#F5F5F5;margin:auto;Padding:0px;width:60px;}
#Form{border:1px solid #CCCCCC;background-color:#F5F5F5;margin:auto;Padding-top:5px;Padding-bottom:5px;width:700px;height:20px;line-height:25px; text-align:center;}
input{border:1px solid #CCCCCC;background-color:#EEEEEE;}
#UL{margin:auto;padding:0px;width:100%;height:25px;line-height:25px;}
#LI{ list-style-type:none;}
#L_LI{margin:auto;height:25px;line-height:25px;width:82%;clear:right;float:left;text-align:left;}
#R_LI{margin:auto;height:25px;line-height:25px;width:18%;clear:right;float:left;text-align:right;}
-->
</style>
<script>
function check(){
if(document.form.catename.value.length<1)
{
alert("乖,填了父类名称我就让你提交!!");
document.form.catename.focus();
return false
}
}
</script>
</head>
<body>
<%
Dim Starttime,Endtime
Starttime=timer()
Sub Children(str)
IF Isnull(str) Then Exit Sub
Dim Crs,Csql
Set Crs=Server.CreateObject("ADODB.Recordset")
Csql="Select * From MenuTree where M_ID in ("&str&")" '使用in的话字段Childid的值必须是以逗号作分割符,否则需split
Crs.open Csql,conn,1
IF Not Crs.Eof Then
Dim MenuList:MenuList=Crs.Getrows()
Crs.Close:Set Crs=Nothing
End IF
For i=0 to Ubound(MenuList,2)
Response.Write "<UL ID='UL' OnMouseOut=""this.style.backgroundColor=''"" OnMouseOver=""this.style.backgroundColor='#EEEEEE';"">"
Response.Write "<LI ID='L_LI'>"
For j=0 to MenuList(3,i) '通过深度来调整缩进距离,以求层次分明而且美观
Response.Write " "
Next
Response.Write "|---"&MenuList(1,i)&"</LI>"
Response.Write "<LI ID='R_LI'><a href='?Action=Add&Parentid="&MenuList(0,i)&"'>添加</a> <a href='Modi.asp?Parentid="&MenuList(0,i)&"'>修改</a> <a href='Del.asp?Parentid="&MenuList(0,i)&"' οnclick=""return confirm('你确定要删除吗?');"">删除</a> </LI>"
Response.Write "</UL>"
IF Not Isnull(MenuList(2,i)) then
Call Children(MenuList(2,i))
End IF
Next
End Sub
IF Request("Action")="Save" Then
Dim Menuname:Menuname=Trim(Request.Form("catename"))
Dim Parentid:Parentid=Request.QueryString("Parentid")
IF Menuname="" Then
Response.Write "<script>alert('您没有填写类别名称');history.go(-1)</script>"
Response.End()
Else
Menuname=Replace(Menuname,"'","")
End IF
IF Parentid="" Then
Conn.Execute("Insert into MenuTree(M_Name) values ('"&Menuname&"')")
Else
IF Not Isnumeric(Parentid) Then
Response.Write ("<script>alert('父类ID不是数字');history.go(-1)</script>")
Response.End()
Else
Dim MaxDepth,MaxID
MaxDepth=Conn.Execute("Select Depth From MenuTree where M_ID="&Parentid&"")(0)+1 '取深度
Conn.Execute("Insert into MenuTree(M_Name,Depth) values ('"&Menuname&"',"&MaxDepth&")")
Dim Ssql:Ssql="Select Max(M_ID) as a From MenuTree"
Dim Srs
Set Srs=Conn.Execute(Ssql)
MaxID=Srs("a") '取得当前最大M_ID
Srs.close:Set Srs=Nothing
Dim Msql,Mrs
Msql="Select * From MenuTree where M_ID="&Parentid&""
Set Mrs=Server.CreateObject("ADODB.Recordset")
Mrs.open Msql,Conn,1,3
IF Isnull(Mrs("Childid")) Then '录入子类M_ID
Mrs("Childid")=MaxID
Else
Mrs("Childid")=Mrs("Childid")&","&MaxID
End IF
Mrs.update
End IF
End IF
Response.Redirect "MenuTree.asp"
End IF
%>
<DIV ID="Form"><a href="?Action=Add" _fcksavedurl=""?Action=Add"" style="font-weight:bold;color:#FF6600">我要添加父类</a></DIV>
<BR/>
<DIV id="MenuList">
<%
'=================================================
'******************开始显示类别*******************
'=================================================
Dim Rs
Set Rs=Server.CreateObject("ADODB.Recordset")
Rs.open "Select * From MenuTree where Depth=0",Conn,1
IF Rs.Eof Then
Response.Write "<span style='color:#FF6600;font-weight:bold;'>·暂时还没有任何分类,我要<a href='?Action=Add'>添加</a></span>"
Else
Do While Not Rs.Eof
Response.Write "<UL ID='UL' OnMouseOut=""this.style.backgroundColor=''"" OnMouseOver=""this.style.backgroundColor='#EEEEEE';"">"
Response.Write "<LI ID='L_LI'>"
Response.Write "|--"&Rs(1)&""
Response.Write "</LI><LI ID='R_LI'><a href='?Action=Add&Parentid="&Rs(0)&"'>添加</a> <a href='Modi.asp?Parentid="&Rs(0)&"'>修改</a> <a href='Del.asp?Parentid="&Rs(0)&"' οnclick=""return confirm('你确定要删除吗?');"">删除</a> </LI></UL>"
IF Not Isnull(Rs(2)) Then
Call Children(Rs(2))
End IF
Rs.Movenext()
Loop
End IF
Rs.Close:Set Rs=Nothing
Closeconn
'=================================================
'******************结束显示类别*******************
'=================================================
%>
</DIV>
<BR/>
<%
IF Request("Action")="Add" Then
%>
<DIV id="Form">
<Form name="form" action="?Action=Save&Parentid=<%=Request("Parentid")%>" method="post" οnsubmit="return check()" style="margin:0px;">
请填写父类名称:<input type="text" name="catename" size="30"> <input type="submit" value="提 交" name="submit">
</Form>
</DIV>
<%
End IF
Endtime=timer()
%>
<DIV align="center">本页耗时<%=Formatnumber((Endtime-Starttime)*1000,2)%>MS</DIV>
</body>
</html>
=================================================
文件名:Modi.asp,修改,可以任意调整类别的位置
=================================================
<!--#include file="Conn.asp"-->
<%
'=============保存修改
IF Request("Action")="Save" Then
Dim Parentid
Parentid=request.QueryString("Parentid")
IF Parentid="" or Not Isnumeric(Parentid) Then
Response.Write "非法参数"
Response.End()
End IF
Dim Parent,Catename
Parent=Request.Form("Parent")
Catename=Trim(Request.Form("catename"))
IF Catename="" Then
Response.Write "类别名称不能为空"
Response.End()
End IF
IF Parent=Parentid Then
Response.Write "不能将当前类别作为自己的父类"
Response.End()
End IF
IF Parent<>"" Then
Rem 开始删除原父类
Sql2="Select * From MenuTree where instr(Childid,"&Parentid&")<>0"
Set Rs2=Server.CreateObject("ADODB.Recordset")
Rs2.open Sql2,Conn,1,3
IF Not Rs2.Eof Then
IF Instr(Rs2(2),",")<>0 Then
IF Right(Rs2(2),Len(Parentid))=Parentid Then
Rs2(2)=Replace(Rs2(2),","&Parentid,"")
Else
Rs2(2)=Replace(Rs2(2),Parentid&",","")
End IF
Else
Rs2(2)=Null
End IF
Rs2.Update
End IF
Rs2.Close:Set Rs2=Nothing
Rem 设置新的父类
Sql3="Select * From MenuTree where M_ID="&Parent
Set Rs3=Server.CreateObject("ADODB.Recordset")
Rs3.open Sql3,Conn,1,3
IF Not Rs3.Eof Then
IF Not Isnull(Rs3(2)) Then
Rs3(2)=Rs3(2)&","&Parentid
Else
Rs3(2)=Parentid
End IF
Rs3.Update
Layer=Rs3(3)
Rs3.Close:Set Rs3=Nothing
End IF
Conn.Execute("Update MenuTree Set M_Name='"&Catename&"',Depth="&Layer&"+1 where M_ID="&Parentid&"")
Else
Conn.Execute("Update MenuTree Set M_Name='"&Catename&"' where M_ID="&Parentid&"")
End IF
Response.Write "<script>alert('修改成功!');location.href='MenuTree.asp'</script>"
End IF
'=================结束保存
Parentid=request.QueryString("Parentid")
IF Parentid="" or Not Isnumeric(Parentid) Then
Response.Write "非法参数"
Response.End()
End IF
Dim Rs,Sql
Sql="Select * From MenuTree where M_ID="&Parentid
Set Rs=Conn.Execute(Sql)
IF Rs.Eof Then
Response.Write "对不起,找不到指定记录"
Response.End()
Else
Depth=Rs(3)
Set Prs=Conn.Execute("Select M_ID From MenuTree where instr(Childid,"&Parentid&")<>0")
IF Not Prs.Eof Then
P_ID=Prs("M_ID")
Prs.close:Set Prs=Nothing
End IF
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="ASP无限级分类" />
<meta name="description" content="ASP无限级分类,2006-9-18" />
<meta name="Author" content="江生华">
<title>ASP无限级分类</title>
<style>
<!--
body{font-size:12px;color:#333333;line-height:20px;}
input{border:1px solid #CCCCCC;background-color:#EEEEEE;}
#Form{border:1px solid #CCCCCC;background-color:#F5F5F5;margin:auto;Padding-top:5px;Padding-bottom:5px;width:700px;height:20px;line-height:25px; text-align:center;}
-->
</style>
<script>
function check(){
<%IF Rs(3)<>0 Then%>
if(document.form.Parent.value=="")
{
alert("必须选择父类");
document.form.Parent.focus();
return false
}
<%End IF%>
if(document.form.catename.value.length<1)
{
alert("乖,填了父类名称我就让你提交!!");
document.form.catename.focus();
return false
}
}
</script>
</head>
<body>
<DIV id="Form">
<Form name="form" action="?Action=Save&Parentid=<%=Request("Parentid")%>" method="post" οnsubmit="return check()" style="margin:0px;">
<%IF Rs(3)<>0 Then%>
父类:<select name="Parent">
<%
Sub Children(str)
IF Isnull(str) Then Exit Sub
Dim Crs,Csql
Set Crs=Server.CreateObject("ADODB.Recordset")
Csql="Select * From MenuTree where M_ID in ("&str&")"
'使用in的话字段Childid的值必须是以逗号作分割符,否则需split或Replace
Crs.open Csql,conn,1
IF Not Crs.Eof Then
Dim MenuList:MenuList=Crs.Getrows()
Crs.Close:Set Crs=Nothing
End IF
For i=0 to Ubound(MenuList,2)
Response.Write "<option value='"&MenuList(0,i)&"'"
IF MenuList(0,i)=P_ID Then
Response.Write " Selected"
End IF
Response.Write ">"
For j=0 to MenuList(3,i) '通过深度来调整缩进距离,以求层次分明而且美观
Response.Write " "
Next
Response.Write "|---"&MenuList(1,i)&"<option>"
IF Not Isnull(MenuList(2,i)) then
Call Children(MenuList(2,i))
End IF
Next
End Sub
Dim Rs1
Set Rs1=Server.CreateObject("ADODB.Recordset")
Rs1.open "Select * From MenuTree where Depth=0",Conn,1
IF Not Rs1.Eof Then
Do While Not Rs1.Eof
Response.Write "<option value='"&Rs1(0)&"'>|--"&Rs1(1)&"<option>"
IF Not Isnull(Rs1(2)) Then
Call Children(Rs1(2))
End IF
Rs1.Movenext()
Loop
End IF
Rs1.Close:Set Rs1=Nothing
%>
</select>
<%End IF%>
类名称:
<input type="text" name="catename" size="20" value="<%=Rs(1)%>">
<input type="submit" value="提 交" name="submit">
</Form>
</DIV>
<%
Rs.close
Set Rs=Nothing
End IF
Closeconn
%>
</body>
</html>
======================================================
文件名:Del.asp,删除类别
======================================================
<!--#include file="Conn.asp"-->
<%
Parentid=request.QueryString("Parentid")
IF Parentid="" or Not Isnumeric(Parentid) Then
Response.Write "非法参数"
Response.End()
End IF
Sql="Select * From MenuTree where M_ID="&Parentid
Set Rs=Server.CreateObject("ADODB.Recordset")
Rs.open Sql,Conn,1,3
IF Rs.Eof Then
Response.Write "对不起,找不到指定记录"
Response.End()
Else
Set Prs=Server.CreateObject("ADODB.Recordset")
Psql="Select * From MenuTree where instr(Childid,"&Parentid&")<>0"
Prs.open Psql,Conn,1,3
IF Not Prs.Eof Then
IF Instr(Prs(2),",")<>0 Then
IF Right(Prs(2),Len(Parentid))=Parentid Then
Prs(2)=Replace(Prs(2),","&Parentid,"")
Else
Prs(2)=Replace(Prs(2),Parentid&",","")
End IF
Else
Prs(2)=Null
End IF
Prs.Update
Prs.close:Set Prs=Nothing
End IF
IF Trim(Rs(2))<>"" Then
Conn.Execute("Delete * From MenuTree where M_ID in ("&Rs(2)&")")
End IF
Rs.Delete
Rs.close:Set Rs=Nothing
End IF
Closeconn
Response.Write "<script>alert('删除成功!');location.href='MenuTree.asp'</script>"
%>
无限级分类
最新推荐文章于 2024-09-29 21:50:07 发布