无限分类添加新类别代码

'无限分类添加新类别代码
'OrderID所有栏目的排列顺序
'RootOrderID同一顶栏目的排列顺序
'ClassOrderID同一父类栏目的排列顺序


if request("action")="AddSave" then

ChannelID=cint(trim(Request.Form("ChannelID")))
ParentClassID=trim(Request.Form("ParentID"))
ClassName=trim(Request.Form("ClassName"))
ClassFolderName=trim(Request.Form("ClassFolderName"))
ClassMemo=trim(Request.Form("ClassMemo"))
ClassKeyWords=trim(Request.Form("ClassKeyWords"))
ClassDescription=trim(Request.Form("ClassDescription"))
IsCreateFolder=trim(Request.Form("IsCreateFolder"))

if ClassName="" Then
response.write("<script>alert('系统出错!请返回填写栏目类别名称');history.go(-1);</script>")
response.End()
end if

if ClassFolderName="" Then
response.write("<script>alert('系统出错!请返回填写栏目类别目录文件夹');history.go(-1);</script>")
response.End()
end if

if ClassMemo="" Then
response.write("<script>alert('系统出错!请返回填写栏目类别说明');history.go(-1);</script>")
response.End()
end if

if ClassKeyWords="" Then
response.write("<script>alert('系统出错!请返回填写栏目类别搜索关键字');history.go(-1);</script>")
response.End()
end if

if ClassDescription="" Then
response.write("<script>alert('系统出错!请返回填写栏目类别搜索描述词');history.go(-1);</script>")
response.End()
end if


If IsValidWindowsFolderName(ClassFolderName)=False Then
 response.Write("<script language=javascript>alert('目录名格式不正确,按确定返回重新填写');history.back();</script>")
 response.End()
end if

ClassFolderName=Replace(PCase(ClassFolderName)," ","-")

'网站频道项目
 set rs=server.CreateObject("Adodb.recordset")
 sql="select * from SystemChannelList Where ChannelID="&ChannelID
 rs.open sql,conn,1,3
 if rs.eof and rs.bof then
 rs.close
 set rs=nothing
 conn.close
 set conn=nothing
 response.write("<script>alert('无此频道数据,系统即将返回!');location.href='ClassList.asp';</script>")
 response.End()   
 else
 ChannelName  =rs("ChannelName")
 ChannelFolderUrl=rs("ChannelFolderUrl")
 ChannelFolderPath=rs("ChannelFolderPath")
 end if
 rs.close
 set rs=nothing
 
 Session("ChannelID")=ChannelID
 Session("ClassName")=ClassName
 Session("ClassFolderName")=ClassFolderName
 Session("ClassMemo")=ClassMemo
 Session("ClassKeyWords")=ClassKeyWords
 Session("ClassDescription")=ClassDescription
 Session("IsCreateFolder")=IsCreateFolder


 
if ParentClassID=0 then
'添加顶类栏目
'查询父类相关数据
 ParentClassName=""  '父类名
 ParentClassFolderName=""  '父类目录名
 ParentClassDepth=0  '父类深度
 newClassRootID=0   '顶类ID
 ParentClassIDPath=0  'ID路径

 '获取已存在的最大栏目ClassID 
 MaxClassID = conn.execute("select Max(ClassID) as List1 From SoftClass")("List1") 
 if isnull(MaxClassID) then
  newRootOrderID=1
  newClassOrderID=1
  newOrderID=1
  PrevID=0
 else
 PrevID=MaxClassID
 
 '获取同一父类栏目中的排列顺序
 newClassOrderID=1
 
 '获取同一顶类栏目中的排列顺序
 newRootOrderID=1
 
 '获取全部栏目的排列顺序
 set rs1=conn.execute("select Count(*) From SoftClass")
 if isnull(rs1(0)) then
 newOrderID=1
 else
 newOrderID=rs1(0)+1
 end if
 set rs1=nothing
 
 end if
 
 ClassFolderPath=ClassFolderName
 ClassLocalPath=ChannelFolderPath&"/"&ClassFolderPath
 ClassFolderUrl=ChannelFolderUrl&"/"&Replace(ClassFolderPath,"/","/")
else
'添加子类栏目

'分添加到一级栏目下和添加到N级栏目下两种情况

 '查询目标父类相关数据
 set rsParent=server.CreateObject("Adodb.recordset")
 sqlParent="select * from SoftClass where ClassID="&ParentClassID
 rsParent.open sqlParent,conn,1,3
 if rsParent.eof and rsParent.bof then
 response.write("<script>alert('未能查询到父类类别对应的数据!系统即将返回上一页');history.go(-1);</script>")
 response.End()
 else
 ParentClassID=rsParent("ClassID")
 ParentClassName=rsParent("ClassName")  '父类名
 ParentClassFolderName=rsParent("ClassFolderName")  '父类目录名
 ParentClassFolderPath=rsParent("ClassFolderPath")  '父类目录名
 ParentClassFolderUrl=rsParent("ClassFolderUrl")  '父类访问路径
 ParentClassDepth=rsParent("ClassDepth")  '父类深度
 ParentClassIDPath=rsParent("ParentIDPath")
 Child=rsParent("Child")
  
 if ParentClassDepth=0 then '如果目标父栏目是一级栏目 
  
  oldClassRootID=rsParent("RootID")   '原始RootID
  newClassRootID=rsParent("ClassID")   '最新RootID
  
  if Child>0 then '如果添加栏目到有子栏目的一级栏目下  
  
  '获取即将添加的栏目ClassID
  MaxClassID = conn.execute("select Max(ClassID) as List1 From SoftClass where ParentID="&ParentClassID)("List1")  
  PrevID=MaxClassID
  
  '获取同一父类的子栏目中的排列顺序
  set rs1=conn.execute("select Max(ClassOrderID) From SoftClass where ParentID="&ParentClassID)
  if isnull(rs1(0)) then
  newClassOrderID=1
  else
  newClassOrderID=rs1(0)+1
  end if
  set rs1=nothing
  
  '获取同一顶类的子栏目中的排列顺序
  set rs1=conn.execute("select Max(RootOrderID) From SoftClass where ParentIDPath like '"&ParentClassIDPath&","&newClassRootID&",%'")
  if isnull(rs1(0)) then
  newRootOrderID=conn.execute("select RootOrderID,ClassID From SoftClass where ClassID="&MaxClassID)("RootOrderID")+1
  else  
  newRootOrderID=rs1(0)+1
  end if
  set rs1=nothing
  
  '获取全部栏目中的的排列顺序
  
  set rs1=conn.execute("select Max(OrderID) From SoftClass where ParentIDPath like '"&ParentIDPath&","&MaxClassID&",%' and RootID>0")
  if  isnull(rs1(0)) then
  newOrderID=conn.execute("select OrderID,ClassID From SoftClass where ClassID="&MaxClassID&" and RootID>0")("OrderID")+1
  else
  newOrderID=rs1(0)+1
  end if
  set rs1=nothing

  '更新其他后面栏目RootID,ClassID对应的RootOrderID,ClassOrderID,OrderID
  'RootOrderID,ClassOrderID也不需要动
  conn.execute("update SoftClass set RootOrderID=RootOrderID+1 where RootOrderID>="&newRootOrderID)
  
  conn.execute("update SoftClass set OrderID=OrderID+1 where OrderID>="&newOrderID)
 
  else '如果目标栏目没有子栏目

  PrevID=0
  newRootOrderID=2
  newClassOrderID=1  
  '获取全部栏目中的的排列顺序
  set rs1=conn.execute("select Max(OrderID) From SoftClass where ParentIDPath like '"&ParentIDPath&","&MaxClassID&",%' and RootID>0")
  if  isnull(rs1(0)) then
  newOrderID=2
  else
  newOrderID=rs1(0)+1
  end if
  set rs1=nothing

  
  '更新其他后面栏目RootID,ClassID对应的RootOrderID,ClassOrderID,OrderID
  'RootOrderID,ClassOrderID也不需要动
  conn.execute("update SoftClass set OrderID=OrderID+1 where OrderID>="&newOrderID)
   
  end if
  
 else
 
  '如果目标父类是N级栏目ClassDepth>1级别
  newClassRootID=rsParent("RootID")
  oldClassRootID=rsParent("RootID")   '最新RootID
  response.Write("<br>"&oldClassRootID)
  topClassRootID=conn.execute("select RootID,ClassID From SoftClass where ClassID="&oldClassRootID)("RootID") 
  response.Write("<br>"&topClassRootID)
  
  if Child>0 then '如果目标N级父栏目已存在子栏目
  
  '获取即将添加的栏目ClassID
  MaxClassID = conn.execute("select Max(ClassID) as List1 From SoftClass where ParentID="&ParentClassID)("List1")  
  PrevID=MaxClassID
  '获取同一父类栏目中的排列顺序
  set rs1=conn.execute("select Max(ClassOrderID) From SoftClass where ParentID="&ParentClassID)
  newClassOrderID=rs1(0)+1
  set rs1=nothing
  
  '获取同一顶类的子栏目中的排列顺序
  
  set rs1=conn.execute("select Max(RootOrderID) From SoftClass where ParentIDPath like '"&ParentIDPath&","&MaxClassID&",%'")
  
  if isnull(rs1(0)) then
  newRootOrderID=conn.execute("select RootOrderID,ClassID From SoftClass where ClassID="&MaxClassID)(0)+1
  else
  newRootOrderID=rs1(0)+1
  end if  
  set rs1=nothing

  '获取全部栏目中的排列顺序  
  set rs1=conn.execute("select Max(OrderID) From SoftClass where ParentIDPath like '"&ParentIDPath&","&MaxClassID&",%'")
  
  if isnull(rs1(0)) then
  newOrderID=conn.execute("select OrderID,ClassID From SoftClass where ClassID="&MaxClassID)(0)+1
  else
  newOrderID=rs1(0)+2
  end if  
  set rs1=nothing

  '更新其他后面栏目RootID,ClassID对应的RootOrderID,ClassOrderID,OrderID
  'RootOrderID,ClassOrderID也不需要动
  conn.execute("update SoftClass set RootOrderID=RootOrderID+1 where RootOrderID>="&newRootOrderID&" and RootID="&oldClassRootID)
  conn.execute("update SoftClass set OrderID=OrderID+1 where OrderID>="&newOrderID)
 
  else '如果目标N级父栏目不存在子栏目

  PrevID=0  
  '获取同一父类栏目中的排列顺序
  newClassOrderID=1 
  
  '获取同一顶类栏目中的排列顺序
  '如果前面有子栏目,且子栏目有别的子栏目
  set rs1=conn.execute("select Max(RootOrderID) From SoftClass where ParentIDPath like '"&ParentClassIDPath&",%'")
  if isnull(rs1(0)) then
  newRootOrderID=conn.execute("select Max(RootOrderID) From SoftClass where ClassDepth="&ParentClassDepth&"")(0)+1
  else
  newRootOrderID=rs1(0)+1
  end if
  
  set rs1=nothing  
  response.Write("<br>"&newRootOrderID)
  response.Write("<br>"&topClassRootID)
  conn.execute("update SoftClass set RootOrderID=RootOrderID+1 where RootOrderID>="&newRootOrderID&" and RootID="&oldClassRootID)
   
  '获取全部栏目中的排列顺序  
  newOrderID=conn.execute("select OrderID,ClassID From SoftClass where ClassID="&ParentClassID)("OrderID")+1
  
  
  '更新其他后面栏目RootID,ClassID对应的RootOrderID,ClassOrderID,OrderID
  'RootOrderID,ClassOrderID也不需要动
  conn.execute("update SoftClass set OrderID=OrderID+1 where OrderID>="&newOrderID)
  'conn.execute("update SoftClass set OrderID=OrderID+1 where RootID>"&topClassRootID&" and ParentID=0")
  'conn.execute("update SoftClass set OrderID=OrderID+1 where RootID>"&oldClassRootID&" and ParentID>0")
  end if
  
 end if
 
 end if
 
 rsParent.close
 set rsParent=nothing

'根据父类数据得到当前路径相关参数
 ClassFolderPath=ParentClassFolderPath&"/"&ClassFolderName
 ClassLocalPath=ChannelFolderPath&"/"&ClassFolderPath
 ClassFolderUrl=ChannelFolderUrl&"/"&Replace(ClassFolderPath,"/","/")
 
end if

'创建对应的类别目录
if IsCreateFolder=1 then
CreateFolder ClassLocalPath,IsCreateFolder
end if

'response.Write("<br>"&newOrderID)
'response.Write("<br>"&newRootOrderID)
'response.Write("<br>"&newClassOrderID)
    
'添加新数据并修改相关字段数值 
 
 UserIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
 If UserIP = "" Then UserIP = Request.ServerVariables("REMOTE_ADDR")  
 UserFrom=Cstr(Request.ServerVariables("HTTP_REFERER"))
 
 CorrectSqlClassFolderName=replace(ClassFolderName,"'","''")
 CorrectSqlClassName=replace(ClassName,"'","''") 
    set rs=server.CreateObject("Adodb.recordset")
 sql="select * from SoftClass where ClassFolderName='"&CorrectSqlClassFolderName&"' and  ClassName='"&CorrectSqlClassName&"' and ParentID="&ParentClassID
 rs.open sql,conn,3,3
 if not rs.eof and not rs.bof then
 rs.close
 set rs=nothing
 conn.close
 set conn=nothing
 response.write("<script>alert('此栏目类别数据已经存在!系统即将返回');history.go(-1);</script>")
 response.end
 else
 rs.addnew 
 
 rs("ChannelID")=ChannelID
 rs("ChannelName")=ChannelName
 rs("ChannelFolderPath")=ChannelFolderPath
 rs("ChannelFolderUrl")=ChannelFolderUrl
 
 if ParentClassID=0 then
 '一级目录的深度为0 
 rs("ParentName")=""
 rs("ParentID")=0
 rs("ClassDepth")=0
 rs("ParentIDPath")="0" 
 else
 rs("ParentName")=ParentClassName
 rs("ParentID")=ParentClassID
 
 
 
 rs("ClassDepth")=Cint(ParentClassDepth)+1
 rs("ParentIDPath")=ParentClassIDPath&","&ParentClassID
 end if
 rs("OrderID")=newOrderID
 rs("RootOrderID")=newRootOrderID
 rs("ClassOrderID")=newClassOrderID
 rs("RootID")=newClassRootID
 rs("PrevID")=PrevID 
 
 rs("ClassName")=ClassName
 rs("ClassFolderName")=ClassFolderName
 rs("ClassFolderPath")=ClassFolderPath
 rs("ClassLocalPath")=ClassLocalPath
  
 rs("ClassMemo")=ClassMemo
 rs("ClassKeyWords")=ClassKeyWords
 rs("ClassDescription")=ClassDescription
 rs("IsCreateFolder")=IsCreateFolder

 
 
 rs("AddUser")=Session("ManagerUserName")
 rs("AddTime")=now()
 rs("AddIP")=UserIP
 rs("AddFrom")=UserFrom
 rs.update  
 end if
 rs.close
 set rs=nothing
 newClassID=conn.execute("Select ClassID,OrderID from SoftClass where OrderID="&newOrderID)("ClassID")
 '更新同一父栏目的上一个栏目的“NextID”字段值
 if PrevID>0 then
  conn.execute("update SoftClass set NextID=" & newClassID & " where ClassID=" & PrevID)
 end if
 
 if ParentClassID>0 then  
  '更新父栏目中的子栏目数量
  Child=conn.execute("Select Count(*) as List1 from SoftClass where ParentID="&ParentClassID)("List1")
  conn.execute("Update SoftClass Set Child="&Child&" where ClassID="&ParentClassID)
 end if 
 
 conn.close
 set conn=nothing
 response.write("<script>alert('栏目类别"&ClassName&"添加完成!系统即将返回列表');location.href='ClassList.asp';</script>")
 response.End()
end if 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疾风铸境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值