无限分类移动修改栏目


<%

'系统页面加载初始化参数设定

ClassID=request("ClassID")
if ClassID="" or not isnumeric(ClassID) then
 response.Write("<script>alert('传递参数错误!系统即将返回!');history.go(-1);</script>")
 response.End()
end if

'类别列表读取函数

Function ShowClassFormOption(sChannelID,CurrentID,sClassDepth)
 dim rsClass,sqlClass,sTemp,tmpClassDepth,i,n
 dim arrShowLine(10)

 for i=0 to ubound(arrShowLine)
  arrShowLine(i)=False
 next
 
 sTemp="<option value=""0"""
  if CurrentID=0 then sTemp=sTemp & " selected"">顶级类别</option>"

 
 sqlClass="Select ClassID,ClassName,ClassDepth,ChannelID,RootID,OrderID From SoftClass "
 
 if sClassDepth>0 then
  sqlClass=sqlClass & " where ClassDepth<"&sClassDepth&" order by OrderID"
 else
  sqlClass=sqlClass & " order by OrderID"
 end if
 
 set rsClass=conn.Execute(sqlClass)
  
 if rsClass.bof and rsClass.bof then
  ShowClassFormOption = sTemp & "<option value="""">添加顶级类别</option>"
  rsClass.close
  set rsClass=Nothing
  Exit Function
 else
  sTemp="<option value=""0"""">顶级类别</option>"
  ClassRecord=rsClass.GetRows(-1)
  '获取最后一行记录
  '数据字段1,类别ID,ClassID
  '数据字段2,类别名称,ClassName
  '数据字段3,类别深度,ClassDepth
  '数据字段4,类别ID,Class
  rsClass.close
  set rsClass=Nothing 
 End if
  
 
 Dim sChecked, tempClassName
 
 For i=0 to Ubound(ClassRecord,2)
  tmpClassDepth=ClassRecord(2,i)
  '数据字段3,类别深度,ClassDepth
  if ClassRecord(3,i)>0 then
   arrShowLine(tmpClassDepth)=True
  else
   arrShowLine(tmpClassDepth)=False
  end if
  
  sChecked = "" : tempClassName = ""
  if ClassRecord(0,i)=CurrentID then sChecked = " selected"
  
  if tmpClassDepth>0 then
   for n=1 to tmpClassDepth
    tempClassName = tempClassName & "&nbsp;&nbsp;"
    if n=tmpClassDepth then
     if ClassRecord(3,i)>0 then
      tempClassName = tempClassName & "├&nbsp;"
     else
      tempClassName = tempClassName & "└&nbsp;"
     end if
    else
     if arrShowLine(n)=True then
      tempClassName = tempClassName & "│"
     else
      tempClassName = tempClassName & "&nbsp;"
     end if
    end if
   next
  end if
    
  tempClassName = tempClassName & ClassRecord(1,i)  
  sTemp=sTemp & "<option value=""" & ClassRecord(0,i) & """ "&sChecked&">" & tempClassName & "</option>"
 Next
 
 ShowClassFormOption=sTemp
 ClassRecord=Empty
End Function

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

ChannelID=cint(trim(Request.Form("ChannelID")))
newParentClassID=Cint(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

'查询父类别ID是否改变
'读取要修改的ClassID类别数据
  set rsClass=server.CreateObject("Adodb.recordset")
  sqlClass="select * from SoftClass where ClassID="&ClassID
  rsClass.open sqlClass,conn,1,3
  if rsClass.eof and rsClass.bof then
  response.write("<script>alert('错误!未查询到对应类别!系统即将返回');location.href='ClassList.asp';</script>")
  response.End()
  else 
 
 if rsClass("ParentID")<>newParentClassID then   '更改了所属栏目,则要做一系列检查
  rstUpdateQuried=1
  if ParentClassID=rsClass("ClassID") then
   response.write("<script>alert('所属栏目不能为自己!!系统即将返回');location.href='ClassList.asp';</script>")
    response.End()   
  end if
  '判断所指定的栏目是否为本栏目的下属栏目
  if rsClass("ParentID")=0 then
   if newParentClassID>0 then
    set trs=conn.execute("select RootID,ClassID From SoftClass where ClassID="&newParentClassID)
    if trs.bof and trs.eof then
    response.write("<script>alert('找不到要移动到的父栏目!系统即将返回');location.href='ClassList.asp';</script>")
     response.End()
    else
    if rsClass("RootID")=trs(0) and rsClass("RootID")<>0 then
    response.write("<script>alert('不能指定顶级栏目的父栏目为其下属栏目!系统即将返回');location.href='ClassList.asp';</script>")
     response.End()     
    end if
    end if
    trs.close
    set trs=nothing
   end if
  else
   set trs=conn.execute("select ClassID From SoftClass where ParentIDPath like '"&rsClass("ParentIDPath")&"," & rsClass("ClassID") & ",%' and ClassID="&newParentClassID)
   if not (trs.eof and trs.bof) then
    response.write("<script>alert('不能指定父栏目的下属栏目作为所属栏目!系统即将返回');location.href='ClassList.asp';</script>")
     response.End()
   end if
   trs.close
   set trs=nothing
  end if
  
 else
  rstUpdateQuried=0
 end if
 
 '读取类别相关历史数据
 
 oldClassDepth=Clng(rsClass("ClassDepth"))
 oldChild=Clng(rsClass("Child"))
 oldRootID=Clng(rsClass("RootID"))
 oldParentID=Clng(rsClass("ParentID"))
 oldParentIDPath=rsClass("ParentIDPath")
 oldPrevClassID=Clng(rsClass("PrevID"))
 oldNextID=Clng(rsClass("NextID"))
 oldClassOrderID=Clng(rsClass("ClassOrderID"))
 oldRootOrderID=Clng(rsClass("RootOrderID"))
 oldOrderID=Clng(rsClass("OrderID"))
 end if
rsClass.close
set rsClass=nothing


IF newParentClassID=0 then 
'查询新父类相关数据
 newParentClassName=""  '父类名
 newParentClassFolderName=""  '父类目录名
 newClassDepth=0
 newParentClassID=0
 newParentClassRootID=0
 ClassFolderPath=ClassFolderName
 ClassLocalPath=ChannelFolderPath&"/"&ClassFolderPath
 ClassFolderUrl=ChannelFolderUrl&"/"&Replace(ClassFolderPath,"/","/")
else
'查询新父类相关数据
 set rsParent=server.CreateObject("Adodb.recordset")
 sqlParent="select * from SoftClass where ClassID="&newParentClassID
 rsParent.open sqlParent,conn,1,3
 if rsParent.eof and rsParent.bof then
 response.write("<script>alert('未能查询到新父类类别对应的数据!系统即将返回上一页');history.go(-1);</script>")
 response.End()
 else
 newParentClassID=Clng(rsParent("ClassID"))
 newParentClassName=rsParent("ClassName")  '父类名
 
 newParentClassFolderName=rsParent("ClassFolderName")  '新父类目录名
 newParentClassFolderPath=rsParent("ClassFolderPath")  '新父类目录名
 newParentClassFolderUrl=rsParent("ClassFolderUrl")  '新父类访问路径
 newParentClassIDPath=rsParent("ParentIDPath")
 
 newParentClassDepth=Clng(rsParent("ClassDepth"))
 
 newParentClassRootID=Clng(rsParent("RootID"))
 newParentClassChild=Clng(rsParent("Child"))
 
 newParentOrderID=Clng(rsParent("OrderID"))
 newParentClassOrderID=Clng(rsParent("ClassOrderID"))
 newParentRootOrderID=Clng(rsParent("RootOrderID"))
 end if
 rsParent.close
 set rsParent=nothing
 
 '根据父类数据得到当前路径相关参数
 ClassFolderPath=newParentClassFolderPath&"/"&ClassFolderName
 ClassLocalPath=ChannelFolderPath&"/"&ClassFolderPath
 ClassFolderUrl=ChannelFolderUrl&"/"&Replace(ClassFolderPath,"/","/")

end if
 
'如果改变了父类,则要更新相关一些数据
IF rstUpdateQuried=1 then
'首先更新历史父栏目的子栏目数量
'如果是顶类栏目,下面的语句是不执行的
conn.execute("update SoftClass set Child=Child-1 where ClassID="&oldParentID)

'******************************************
'由一级别移动到1级别下面
'****************************************** 
IF oldParentID=0 and newParentClassRootID=0 and newParentClassID>0 then 
 '分顶类栏目往前移动和往后移动
 if oldClassOrderID>newParentClassOrderID then
 MovetoBehind=0'顶类栏目往前移动
 response.Write("<br>顶类栏目往前移动到系统根栏目")
 else
 MovetoBehind=1'顶类栏目往后移动
 response.Write("<br>顶类栏目往后移动到系统根栏目")
 end if
 response.Write("<br>顶类栏目移动方向:"&MovetoBehind)
 '查询当前移动栏目的子类别数量
 set rs1=conn.execute("select Count(*) from SoftClass where ParentIDPath like '0,"&ClassID&",%'")
 if isnull(rs1(0)) then
 ChildClassNumber=0
 else
 ChildClassNumber=rs1(0)
 end if
 set rs1=nothing
 TotalMovingNumber=ChildClassNumber+1 
 response.Write("<br>当前移动栏目包含子栏目的栏目数量"&TotalMovingNumber)
 newClassDepth=1
 newRootID=newParentClassID
  
 if newParentClassChild>0 then
  '*************************************
  '不同顶类栏目中的顶类栏目移动到别的包含子栏目顶类栏目下
  '*************************************
  response.Write("<br>不同顶类栏目中的顶类栏目移动到别的包含子栏目顶类栏目下:") 
  '获取新父栏目的子栏目中的当前类别的前一栏目 
  newPrevClassOrderID=conn.execute("select Max(ClassOrderID) from SoftClass where ParentID="&newParentClassID)(0)
  PrevClassID=conn.execute("select ClassID,ClassOrderID from SoftClass where ClassOrderID="&newPrevClassOrderID&" and ParentID="&newParentClassID)(0)  
  conn.execute("Update SoftClass set NextID="&ClassID&" where ClassID="&PrevClassID)
  newClassOrderID=newPrevClassOrderID+1  
  '获取同一顶类栏目中的排列顺序 
  set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '0,"&newRootID&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)  
  else
  newMaxRootOrderID=rs1(0)
  end if
  newRootOrderID=newMaxRootOrderID+1
  set rs1=nothing
  response.Write("<br>最大前一栏目的RootOrderID:"&newMaxRootOrderID) 
   
  if MovetoBehind=0 then '顶类栏目往前移动
  '获取所有栏目中的排列顺序
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '0,"&newRootID&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)
  else
  newMaxOrderID=rs1(0)
  end if
  newOrderID=newMaxOrderID+1
  set rs1=nothing
  response.Write("<br>最大前一栏目的OrderID:"&newMaxOrderID) 
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newRootID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newMaxOrderID&" and OrderID<"&oldOrderID)
  '更新同一父栏目的上一个栏目的“NextID”字段值
  conn.execute("update SoftClass set NextID=" & ClassID & " where ClassID=" & PrevClassID)
  '更新父栏目中的子栏目数量
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID)  
   
  else '顶类栏目往后移动 
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '0,"&newRootID&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)  
  else
  newMaxOrderID=rs1(0)  
  end if
  newOrderID=newMaxOrderID-TotalMovingNumber
  set rs1=nothing 
  response.Write("<br>最大前一栏目的OrderID:"&newMaxOrderID)
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newRootID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and (ParentIDPath not like '0,"&newRootID&",%')")  
  '更新父栏目中的子栏目数量
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
  '更新同一父栏目的上一个栏目的“NextID”字段值
  conn.execute("update SoftClass set NextID=" & ClassID & " where ClassID=" & PrevClassID)
  
  end if '移动的栏目包含子栏目且顶类栏目往前往后移动代码结束  
  '*********************************
  '批量更新所有移动的子栏目的排序 
  '*********************************
  response.Write("<br>批量更新所有移动的子栏目的排序--顶类栏目往前移动") 
  set rs=conn.execute("select * From SoftClass where ParentIDPath like '0,"&ClassID&",%'")
  i=0
  do while not rs.eof
   i=i+1
   tempParentIDPath=replace(rs("ParentIDPath"),"0,","0,"&newParentClassID&",")
   conn.execute("update SoftClass set ClassDepth=ClassDepth+"&newClassDepth&"+1,RootOrderID="&newRootOrderID&"+"&i&",RootID="&newRootID&",ParentIDPath='"&tempParentIDPath&"'")
   rs.movenext
  loop
  rs.close
  set rs=nothing
 else
  '*************************************************************
  '不同顶类栏目中的顶类栏目移动到别的不包含子栏目顶类栏目下
  '*************************************************************
  response.Write("<br>不同顶类栏目中的顶类栏目移动到别的不包含子栏目顶类栏目下:")
  '获取新父栏目的子栏目中的当前类别的前一栏目 
  PrevClassID=0
  '获取同一父类栏目中的排列顺序 
  newClassOrderID=1  
  '获取同一顶类栏目中的排列顺序 
  set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '0,"&newParentClassID&",%'")
  if isnull(rs1(0)) then
  newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
  else
  newMaxRootOrderID=rs1(0)
  end if
  newRootOrderID=newMaxRootOrderID+1
  set rs1=nothing
  response.Write("<br>最大前一栏目的RootOrderID:"&newMaxRootOrderID)
  
  if MovetoBehind=0 then '顶类栏目往前移动 
  '获取所有栏目中的排列顺序
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '0,"&newParentClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
  else
  newMaxOrderID=rs1(0)
  end if
  newOrderID=newMaxOrderID+1
  set rs1=nothing
  response.Write("<br>最大前一栏目的OrderID:"&newMaxOrderID)
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newMaxOrderID&" and OrderID<"&oldOrderID)   
  '更新父栏目中的子栏目数量  
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID)  
  
  else '顶类栏目往后移动 
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '0,"&newParentClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
  newOrderID=newMaxOrderID-TotalMovingNumber
  else
  newMaxOrderID=rs1(0)
  newOrderID=newMaxOrderID-TotalMovingNumber
  end if
  set rs1=nothing 
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<"&newMaxOrderID&" and (ParentIDPath not like '0,"&newParentClassID&",%')")
  '更新父栏目中的子栏目数量  
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID)
  end if'顶类栏目往后移动分类代码结束
  
  '批量更新所有移动的子栏目的排序   
  set rs=conn.execute("select * From SoftClass where ParentIDPath like '0,"&ClassID&",%'")
  i=0
  do while not rs.eof
   i=i+1
   tempParentIDPath=replace(rs("ParentIDPath"),"0,",newParentClassID)
   conn.execute("update SoftClass set ClassDepth=ClassDepth+"&newClassDepth&"+1,RootOrderID="&newRootOrderID&"+"&i&",RootID="&newRootID&",ParentIDPath='"&tempParentIDPath&"'")
   rs.movenext
  loop
  rs.close
  set rs=nothing 
  
  
 end if'新父栏目包含与不包含子栏目分类代码结束
 
'******************************************
'由一级别移动到N级别(N>1)
'****************************************** 
ELSEIF oldParentID=0 and newParentClassRootID>0 then
 response.Write("<br>由一级别移动到N级别(N>1)")
 '分顶类栏目往前移动和往后移动 
 if oldClassOrderID>newParentClassOrderID then 
 MovetoBehind=0'顶类栏目往前移动
 response.Write("<br>顶类栏目往前移动到N级栏目")
 else
 MovetoBehind=1'顶类栏目往后移动
 response.Write("<br>顶类栏目往后移动到N级栏目")
 end if
 '查询当前移动栏目的子类别数量
 set rs1=conn.execute("select Count(*) from SoftClass where ParentIDPath like '"&oldParentIDPath&","&ClassID&",%'")
 if isnull(rs1(0)) then
 ChildClassNumber=0
 else
 ChildClassNumber=rs1(0)
 end if
 set rs1=nothing
 TotalMovingNumber=ChildClassNumber+1 
 response.Write("<br>当前移动栏目的栏目数量"&TotalMovingNumber)
 newClassDepth=newParentClassDepth+1
 newRootID=newParentClassRootID
  
 if newParentClassChild>0 then
  '*************************************************************
  '不同顶类栏目中的顶类栏目移动到别的包含子栏目N级栏目下
  '*************************************************************
  response.Write("<br>不同顶类栏目中的顶类栏目移动到别的包含子栏目N级栏目下:")
  '获取新父栏目的子栏目中的当前类别的前一栏目 
  newPrevClassOrderID=conn.execute("select Max(ClassOrderID) from SoftClass where ParentID="&newParentClassID)(0)
  PrevClassID=conn.execute("select ClassID,ClassOrderID from SoftClass where ClassOrderID="&newPrevClassOrderID&" and ParentID="&newParentClassID)(0)
  response.Write("<br>前一子栏目ID"&PrevClassID)
  conn.execute("Update SoftClass set NextID="&ClassID&" where ClassID="&PrevClassID)
  newClassOrderID=newPrevClassOrderID+1
  response.Write("<br>当前父栏目已经存在的子栏目数量"&newPrevClassOrderID)  
  '获取同一顶类栏目中的排列顺序 
  set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&newParentClassID&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)  
  else
  newMaxRootOrderID=rs1(0)
  end if
  newRootOrderID=newMaxRootOrderID+1
  set rs1=nothing
  response.Write("<br>当前同一顶类最大排序:"&newMaxRootOrderID) 
  
  if MovetoBehind=0 then '移动的栏目包含子栏目且顶类栏目往前移动
  
  '获取所有栏目中的排列顺序
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&newParentClassID&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)
  else
  newMaxOrderID=rs1(0)
  end if
  newOrderID=newMaxOrderID+1
  set rs1=nothing
  response.Write("<br>前一栏目总排序:"&newMaxOrderID) 
  response.Write("<br>新父栏目的顶类栏目CLASSID:"&newParentClassRootID)   
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and RootID="&newRootID)
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newMaxOrderID&" and OrderID<"&oldOrderID)
  '更新父栏目中的子栏目数量  
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID)
  
  else '移动的栏目包含子栏目且顶类栏目往后移动
  
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&newParentClassID&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)  
  else
  newMaxOrderID=rs1(0)  
  end if
  newOrderID=newMaxOrderID-TotalMovingNumber
  set rs1=nothing  
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassRootID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and (ParentIDPath not like '"&newParentClassIDPath&","&ClassID&",%')")
  '更新父栏目中的子栏目数量
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
  '更新同一父栏目的上一个栏目的“NextID”字段值
  conn.execute("update SoftClass set NextID=" & ClassID & " where ClassID=" & PrevClassID)
  end if '移动的栏目包含子栏目且顶类栏目往前往后移动代码结束 
 
 else
  '*************************************************************
  '不同顶类栏目中的顶类栏目移动到别的不包含子栏目N级栏目下
  '*************************************************************
  response.Write("<br>不同顶类栏目中的顶类栏目移动到别的不包含子栏目N级栏目下:")
  '获取新父栏目的子栏目中的当前类别的前一栏目 
  PrevClassID=0
  '获取同一父类栏目中的排列顺序 
  newClassOrderID=1
  
  '获取同一顶类栏目中的排列顺序  
  newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
  newRootOrderID=newMaxRootOrderID+1
  response.Write("<br>最大存在上一顶类栏目的RootOrderID"&newMaxRootOrderID)
  
  if MovetoBehind=0 then '新父类栏目不包含子栏目且顶类栏目往前移动  
  '获取所有栏目中的排列顺序
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
  newOrderID=newMaxOrderID+1
  
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassRootID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newMaxOrderID&" and OrderID<"&oldOrderID)
  '更新父栏目中的子栏目数量
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID)  
  else '新父类栏目不包含子栏目且顶类栏目往后移动
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
  newOrderID=newMaxOrderID-TotalMovingNumber
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassRootID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and (ParentIDPath not like '"&newParentClassIDPath&","&ClassID&",%')") 
  '更新父栏目中的子栏目数量
  conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
  end if'顶类栏目往后移动分类代码结束
  
 end if'移动的栏目包含与不包含子栏目分类代码结束

'******************************************
'由N级别移动到1级别栏目下
'****************************************** 
ELSEIF oldParentID>0 and newParentClassRootID=0 and newParentClassID>0 then
  
  '查询当前移动栏目的子类别数量
  set rs1=conn.execute("select Count(*) from SoftClass where ParentIDPath like '"&oldParentIDPath&","&ClassID&",%'")
  if isnull(rs1(0)) then
  ChildClassNumber=0
  else
  ChildClassNumber=rs1(0)
  end if
  set rs1=nothing
  TotalMovingNumber=ChildClassNumber+1 
  response.Write("<br>当前移动栏目的栏目数量"&TotalMovingNumber)
  newRootID=newParentClassID
 
 if newParentClassChild>0 then
  '*************************************************************
  '不同顶类栏目中的N级栏目移动到别的包含子栏目的1级栏目下
  '*************************************************************
  response.Write("<br>不同顶类栏目中的N级栏目移动到别的包含子栏目的1级栏目下:")
  '获取新父栏目的子栏目中的当前类别的前一栏目 
  newPrevClassOrderID=conn.execute("select Max(ClassOrderID) from SoftClass where ParentID="&newParentClassID)(0)
  PrevClassID=conn.execute("select ClassID,ClassOrderID from SoftClass where ClassOrderID="&newPrevClassOrderID&" and ParentID="&newParentClassID)(0)
  response.Write("<br>前一子栏目ID"&PrevClassID)
  conn.execute("Update SoftClass set NextID="&ClassID&" where ClassID="&PrevClassID)
  newClassOrderID=newPrevClassOrderID+1
  response.Write("<br>当前父栏目已经存在的子栏目数量"&newPrevClassOrderID)  
  '获取同一顶类栏目中的排列顺序 
  set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)  
  else
  newMaxRootOrderID=rs1(0)
  end if
  newRootOrderID=newMaxRootOrderID+1
  set rs1=nothing
  response.Write("<br>当前同一顶类最大排序:"&newMaxRootOrderID)
 
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)
  newOrderID=newMaxOrderID-TotalMovingNumber
  else
  newMaxOrderID=rs1(0)
  newOrderID=newMaxOrderID-TotalMovingNumber
  end if
  set rs1=nothing  
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and (ParentIDPath not like '0,"&newParentClassID&",%')")

 
 else
  '*************************************************************
  '不同顶类栏目中的N级栏目移动到别的不包含子栏目1级栏目下
  '*************************************************************
  response.Write("<br>不同顶类栏目中的N级栏目移动到别的不包含子栏目1级栏目下:")
  '获取新父栏目的子栏目中的当前类别的前一栏目 
  PrevClassID=0
  '获取同一父类栏目中的排列顺序 
  newClassOrderID=1 
  response.Write("<br>当前父类ClassID:"&newParentClassID) 
  '获取同一顶类栏目中的排列顺序 
  set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '0,"&newParentClassID&",%'")
  if isnull(rs1(0)) then
  newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
  else
  newMaxRootOrderID=rs1(0)
  end if
  newRootOrderID=newMaxRootOrderID+1
  set rs1=nothing
  response.Write("<br>前一栏目的RootOrderID"&newMaxRootOrderID)
  set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '0,"&newParentClassID&",%'")
  if isnull(rs1(0)) then
  newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)  
  else
  newMaxOrderID=rs1(0)  
  end if
  newOrderID=newMaxOrderID-TotalMovingNumber
  set rs1=nothing
  response.Write("<br>前一栏目的OrderID"&newMaxOrderID)
  '更新同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassID&",%'")
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and (ParentIDPath not like '0,"&newParentClassID&","&ClassID&",%')")   
  
 end if'移动的栏目包含与不包含子栏目分类代码结束 

'******************************************
'由N级别移动到根目录下
'****************************************** 
ELSEIF oldParentID>0 and newParentClassID=0 then
  '*************************************************************
  '不同顶类栏目中的N级栏目移动到根目录下
  '************************************************************* ]
  response.Write("<br>由N级别移动到根目录下:") 
  '查询当前移动栏目的子类别数量
  set rs1=conn.execute("select Count(*) from SoftClass where ParentIDPath like '"&oldParentIDPath&","&ClassID&",%'")
  if isnull(rs1(0)) then
  ChildClassNumber=0
  else
  ChildClassNumber=rs1(0)
  end if
  set rs1=nothing
  TotalMovingNumber=ChildClassNumber+1
  response.Write("<br>当前移动栏目的栏目数量:"&TotalMovingNumber)
  newClassDepth=0
  newRootID=0
  
  '获取新父栏目的子栏目中的当前类别的前一栏目 
  newPrevClassOrderID=conn.execute("select Max(ClassOrderID) from SoftClass where ParentID=0")(0)
  PrevClassID=conn.execute("select ClassID,ClassOrderID from SoftClass where ClassOrderID="&newPrevClassOrderID&" and ParentID=0")(0)
  response.Write("<br>前一顶类栏目的ClassID"&PrevClassID)
  conn.execute("Update SoftClass set NextID="&ClassID&" where ClassID="&PrevClassID)
  newClassOrderID=newPrevClassOrderID+1
  response.Write("<br>根栏目中的当前栏目的排序:"&newClassOrderID)  
  '获取同一顶类栏目中的排列顺序   
  newRootOrderID=1

  newMaxOrderID=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '0,"&PrevClassID&",%'")(0)
  if newMaxOrderID=oldOrderID then
  newOrderID=newMaxOrderID
  else  
  newOrderID=newMaxOrderID-TotalMovingNumber
  end if
  set rs1=nothing  
  '更新历史同一顶类栏目的RootOrderID
  conn.execute("update SoftClass set RootOrderID=RootOrderID-"&TotalMovingNumber&" where RootOrderID>"&oldRootOrderID&" and RootID="&oldRootID&" and (ParentIDPath not like '"&oldParentIDPath&",%')")
  if newOrderID<>oldOrderID then
  '更新所有栏目的OrderID
  conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newOrderID&" and (ParentIDPath not like '"&oldParentIDPath&",%')")
  end if
  
  '批量更新所有移动的子栏目的排序   
  set rs=conn.execute("select * From SoftClass where ParentIDPath like '"&oldParentIDPath&",%'")
  i=0
  do while not rs.eof
   if rs("ClassDepth")>1 then 
   tempParentIDPath=replace(rs("ParentIDPath"),oldParentIDPath,"0,")
   conn.execute("update SoftClass set ClassDepth=ClassDepth-"&oldClassDepth&"+1,RootOrderID="&newRootOrderID&"+"&i&",RootID="&ClassID&",ParentIDPath='"&tempParentIDPath&"'")
   end if
   rs.movenext
   i=i+1   
  loop
  rs.close
  set rs=nothing      

'******************************************
'类别由N级别移动到N级别(N>1)
'****************************************** 
ELSE '(oldParentID>0 and newParentClassRootID>0)
'分移动到相同顶类的栏目跟不同顶类的栏目下
'移动到不同顶类目录下分往前移动和往后移动两类
newClassDepth=newParentClassDepth+1
 
 if oldRootID<>newParentClassRootID then

  '分顶类栏目往前移动和往后移动
  oldTopClassOrderID=Clng(conn.execute("select ClassOrderID,ClassID from SoftClass where RootID="&oldRootID)(0))
  if oldTopClassOrderID>newParentClassOrderID then 
  MovetoBehind=0'顶类栏目往前移动
  else
  MovetoBehind=1'顶类栏目往后移动
  end if
  
  '查询当前移动栏目的子类别数量
  set rs1=conn.execute("select Count(*) from SoftClass where ParentIDPath like '"&oldParentIDPath&","&ClassID&",%'")
  if isnull(rs1(0)) then
  ChildClassNumber=0
  else
  ChildClassNumber=rs1(0)
  end if
  set rs1=nothing
  TotalMovingNumber=ChildClassNumber+1
  MaxOldChildOrderID=oldOrderID+ChildClassNumber
   
  if newParentClassChild>0 then '移动到包含子栏目的N级类别下
  '*************************************************************
  '不同顶类栏目中的N级栏目移动到别的包含子栏目N级栏目下
  '*************************************************************
  response.Write("<br>不同顶类栏目中的N级栏目移动到别的包含子栏目N级栏目下:")
   '获取新父栏目的子栏目中的当前类别的前一栏目 
   PrevClassID=conn.execute("select Max(ClassID) from SoftClass where ParentID="&newParentClassID)(0)
   conn.execute("Update SoftClass set NextID="&ClassID&" where ClassID="&PrevClassID)
   '获取同一父类栏目中的排列顺序
   newPrevClassOrderID=conn.execute("select Max(ClassOrderID) from SoftClass where ParentID="&newParentClassID)(0)
   
   newClassOrderID=newPrevClassOrderID+1
   
   '获取同一顶类栏目中的排列顺序 
   set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
   if isnull(rs1(0)) then
   newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)
   else
   newMaxRootOrderID=rs1(0)
   end if
   newRootOrderID=newMaxRootOrderID+1   
   set rs1=nothing
   response.Write("<br>前一栏目的RootOrderID"&newMaxRootOrderID)
   
   if MovetoBehind=0 then '移动栏目包含子栏目且其顶类栏目往前移动   
   '获取所有栏目中的排列顺序
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
   else
   newMaxOrderID=rs1(0)
   end if
   newOrderID=newMaxOrderID+1
   set rs1=nothing   
   response.Write("<br>前一栏目的OrderID"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassRootID&",%'")   
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newOrderID&"  and OrderID<"&MaxOldChildOrderID&" and ParentIDPath not like '"&oldParentIDPath&","&ClassID&",%' ")
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
   '更新同一父栏目的上一个栏目的“NextID”字段值
   conn.execute("update SoftClass set NextID=" & ClassID & " where ClassID=" & PrevClassID)
   
   else'移动栏目包含子栏目且其顶类栏目往后移动
   
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)   
   else
   newMaxOrderID=rs1(0)   
   end if
   newOrderID=newMaxOrderID-TotalMovingNumber
   set rs1=nothing
   response.Write("<br>前一栏目的OrderID"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassRootID&",%'")
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and (ParentIDPath not like '"&newParentClassIDPath&","&ClassID&",%')") 
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
   '更新同一父栏目的上一个栏目的“NextID”字段值
   conn.execute("update SoftClass set NextID=" & ClassID & " where ClassID=" & PrevClassID) 
   end if  
  
  else '移动到不包含子栏目的N级类别下
  '*************************************************************
  '不同顶类栏目中的N级栏目移动到别的不包含子栏目N级栏目下
  '*************************************************************
  response.Write("<br>不同顶类栏目中的N级栏目移动到别的不包含子栏目N级栏目下:")
   PrevClassID=0
   '获取同一父类栏目中的排列顺序 
   newClassOrderID=1
   '获取同一顶类栏目中的排列顺序 
   set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&",%'")
   if isnull(rs1(0)) then
   newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
   else
   newMaxRootOrderID=rs1(0)
   end if
   newRootOrderID=newMaxRootOrderID+1
   set rs1=nothing
   response.Write("<br>前一栏目的RootOrderID"&newMaxRootOrderID)
   
   if MovetoBehind=0 then '移动栏目不包含子栏目且其顶类栏目往前移动   
   '获取所有栏目中的排列顺序
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
   else
   newMaxOrderID=rs1(0)
   end if
   newOrderID=newMaxOrderID+1
   set rs1=nothing
   response.Write("<br>前一栏目的OrderID"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassRootID&",%'")
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newMaxOrderID&" and OrderID<"&oldOrderID)
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and (ParentIDPath not like '"&newParentClassIDPath&","&ClassID&",%')")
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
      
   else'移动栏目不包含子栏目且其顶类栏目往后移动
   '获取所有栏目中的排列顺序
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)   
   else
   newMaxOrderID=rs1(0)   
   end if
   newOrderID=newMaxOrderID-TotalMovingNumber
   set rs1=nothing
   response.Write("<br>前一栏目的OrderID"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and ParentIDPath like '0,"&newParentClassRootID&",%'")   
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and (ParentIDPath not like '"&newParentClassIDPath&","&ClassID&",%')")
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
      
   end if  
     
  end if'不同顶类N层栏目移动的代码结束
 
 '********************************** 
 '要移动的栏目在相同顶类栏目之间移动
 '**********************************   
 else
  '查询当前移动栏目的子类别数量
  set rs1=conn.execute("select Count(*) from SoftClass where ParentIDPath like '"&oldParentIDPath&","&ClassID&",%'")
  if isnull(rs1(0)) then
  ChildClassNumber=0
  else
  ChildClassNumber=rs1(0)
  end if
  set rs1=nothing
  TotalMovingNumber=ChildClassNumber+1
     
  if newParentClassChild>0 then '移动到包含子栏目的N级类别下
  '*************************************************************
  '相同顶类栏目中的N级栏目移动到别的包含子栏目N级栏目下
  '*************************************************************
  response.Write("<br>同一顶类栏目中的N级栏目移动到别的包含子栏目N级栏目下:")
   '获取新父栏目的子栏目中的当前类别的前一栏目
   PrevClassOrderID= conn.execute("select Max(ClassOrderID) from SoftClass where ParentID="&newParentClassID)
   PrevClassID=conn.execute("select ClassID,ClassOrderID from SoftClass where ParentID="&newParentClassID&" and ClassOrderID="&PrevClassOrderID)
   conn.execute("Update SoftClass set NextID="&ClassID&" where ClassID="&PrevClassID)
   '获取同一父类栏目中的排列顺序
   newPrevClassOrderID=conn.execute("select Max(ClassOrderID) from SoftClass where ParentID="&newParentClassID)(0)
   
   newClassOrderID=newPrevClassOrderID+1   
   
   '获取同一顶类栏目中的排列顺序 
   set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
   if isnull(rs1(0)) then
   newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)
   else
   newMaxRootOrderID=rs1(0)
   end if
   newRootOrderID=newMaxRootOrderID+1
   set rs1=nothing
   response.Write("<br>前一栏目的RootOrderID"&newMaxRootOrderID)
   
   if oldClassOrderID>newParentClassOrderID then '同一顶类栏目中移动栏目包含子栏目且往前移动   
   '获取所有栏目中的排列顺序
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
   else
   newMaxOrderID=rs1(0)
   end if
   newOrderID=newMaxOrderID+1
   set rs1=nothing   
   response.Write("<br>前一栏目的OrderID"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and RootOrderID<"&oldRootOrderID&" and RootID="&oldRootID)
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newMaxOrderID&" and OrderID<"&oldOrderID&" and RootID="&oldRootID)
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
   '更新同一父栏目的上一个栏目的“NextID”字段值
   conn.execute("update SoftClass set NextID=" & ClassID & " where ClassID=" & PrevClassID) 
   
   else'移动栏目包含子栏目且其顶类栏目往后移动
   
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&","&PrevClassID&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&PrevClassID)(0)   
   else
   newMaxOrderID=rs1(0)   
   end if
   newOrderID=newMaxOrderID-TotalMovingNumber
   set rs1=nothing
   response.Write("<br>前一栏目的OrderID"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where RootOrderID>"&newMaxRootOrderID&" and RootOrderID<"&oldRootOrderID&" and RootID="&oldRootID)
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and RootID="&oldRootID) 
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID) 
   '更新同一父栏目的上一个栏目的“NextID”字段值
   conn.execute("update SoftClass set NextID=" & ClassID & " where ClassID=" & PrevClassID)   
   end if  
  
  else '移动到不包含子栏目的N级类别下
  '*************************************************************
  '相同顶类栏目中的N级栏目移动到别的不包含子栏目N级栏目下
  '*************************************************************
  response.Write("<br>同一顶类栏目中的N级栏目移动到别的不包含子栏目N级栏目下:")
   PrevClassID=0
   '获取同一父类栏目中的排列顺序 
   newClassOrderID=1
   '获取同一顶类栏目中的排列顺序 
   set rs1=conn.execute("select Max(RootOrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&",%'")
   if isnull(rs1(0)) then
   newMaxRootOrderID=conn.execute("select RootOrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
   else
   newMaxRootOrderID=rs1(0)
   end if
   newRootOrderID=newMaxRootOrderID+1
   set rs1=nothing
   response.Write("<br>前一栏目的RootOrderID:"&newMaxRootOrderID)
   if oldClassOrderID>newParentClassOrderID then '移动栏目不包含子栏目且其顶类栏目往前后移动   
   '获取所有栏目中的排列顺序
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)
   else
   newMaxOrderID=rs1(0)
   end if
   newOrderID=newMaxOrderID+1
   set rs1=nothing
   response.Write("<br>前一栏目的OrderID:"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" where  RootOrderID>"&newMaxRootOrderID&" and RootOrderID<"&oldRootOrderID&" and RootID="&oldRootID)
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID+"&TotalMovingNumber&" where OrderID>"&newMaxOrderID&" and OrderID<"&oldOrderID)
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and RootID="&oldRootID)
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID)   
   
   else'移动栏目不包含子栏目且其顶类栏目往后移动
   
   set rs1=conn.execute("select Max(OrderID) from SoftClass where ParentIDPath like '"&newParentClassIDPath&",%'")
   if isnull(rs1(0)) then
   newMaxOrderID=conn.execute("select OrderID,ClassID from SoftClass where ClassID="&newParentClassID)(0)   
   else
   newMaxOrderID=rs1(0)   
   end if
   newOrderID=newMaxOrderID-TotalMovingNumber
   set rs1=nothing
   response.Write("<br>前一栏目的OrderID:"&newMaxOrderID)
   '更新同一顶类栏目的RootOrderID
   conn.execute("update SoftClass set RootOrderID=RootOrderID+"&TotalMovingNumber&" RootOrderID>"&newMaxRootOrderID&" and RootOrderID<"&oldRootOrderID&" and RootID="&oldRootID)   
   '更新所有栏目的OrderID
   conn.execute("update SoftClass set OrderID=OrderID-"&TotalMovingNumber&" where OrderID>"&oldOrderID&" and OrderID<="&newMaxOrderID&" and RootID="&oldRootID) 
   '更新父栏目中的子栏目数量
   conn.execute("Update SoftClass Set Child=Child+1 where ClassID="&newParentClassID)     
   end if '同一顶类栏目中移动栏目
     
  end if '移动到包含与不包含子栏目的N级类代码结束

  END IF
 END IF
END IF
'移动栏目资料修改结束

'创建对应的类别目录
if IsCreateFolder=1 then
response.Write("<br>"&ClassLocalPath)
CreateFolder ClassLocalPath,IsCreateFolder
end if 

    
'更新数据库对应类别的字段值 
 
 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 ClassID="&ClassID
 rs.open sql,conn,3,3
 if rs.eof and 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("ChannelID")=ChannelID
 rs("ChannelName")=ChannelName
 rs("ChannelFolderPath")=ChannelFolderPath
 rs("ChannelFolderUrl")=ChannelFolderUrl
 
 rs("ParentName")=newParentClassName
 rs("ParentID")=newParentClassID
 
 
 rs("ClassName")=ClassName
 rs("ClassFolderName")=ClassFolderName
 rs("ClassFolderPath")=ClassFolderPath
 rs("ClassLocalPath")=ClassLocalPath
 
 rs("ClassDepth")=newClassDepth
 if newClassDepth>0 then 
 rs("RootID")=newParentClassID
 else
 rs("RootID")=0
 end if 
 
 rs("ClassMemo")=ClassMemo
 rs("ClassKeyWords")=ClassKeyWords
 rs("ClassDescription")=ClassDescription
 rs("IsCreateFolder")=IsCreateFolder
 
 if rstUpdateQuried=1 then
 
 rs("PrevID")=PrevClassID
 rs("OrderID")=newOrderID
 rs("RootOrderID")=newRootOrderID
 rs("ClassOrderID")=newClassOrderID 
 end if
 
 rs("UpdateUser")=Session("ManagerUserName")
 rs("UpdateTime")=now()
 rs("UpdateIP")=UserIP
 rs("UpdateFrom")=UserFrom
 rs.update  
 end if
 rs.close
 set rs=nothing
  
 conn.close
 set conn=nothing
 response.write("<br>栏目类别"&ClassName&"修改完成!系统即将返回列表<a href='ClassList.asp'>点这里返回</a>")
 response.End()
 response.write("<script>alert('栏目类别"&ClassName&"修改完成!系统即将返回列表');location.href='ClassList.asp';</script>")
 response.End()

end if

%>

你可能感兴趣的:(无限分类移动修改栏目)