疫情期间手机直线:18622734798
当前位置:首页网站设计:基础篇 → 全部信息
ASP无限级分类代码示例方面的知识
更新时间:2012/10/31 点击:1226次
  1. <!--#include file="../include/conn.asp"--> 
  2. <
  3. Dim Action,ParentID,ErrMsg,FoundErr,strTemp 
  4. ParentID=trim(request("ParentID")) 
  5. Action=trim(Request("Action")) 
  6.  
  7. if ParentID="" then 
  8. ParentID=0 
  9. else 
  10. ParentID=CLng(ParentID) 
  11. end if 
  12. %>  

 

  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
  4. <title>分类管理</title> 
  5. <link href="style.css" rel="stylesheet" type="text/css"> 
  6. </head> 
  7.  
  8. <body> 
  9. <table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" class="border"> 
  10. <tr class="topbg"> 
  11. <td height="22" colspan="2" align="center"><strong>信 息 分 类 管 理</strong></td> 
  12. </tr> 
  13. <tr class="tdbg"> 
  14. <td width="100" height="30" ><strong>分类管理导航:</strong></td> 
  15. <td> <a href="?Action=Add">添加分类</a> | <a href="?">管理分类</a></td> 
  16. </tr> 
  17. </table> 
  18. <
  19. if Action="Add" then 
  20. call AddClass() 
  21. elseif Action="SaveAdd" then 
  22. call SaveAdd() 
  23. elseif Action="Modify" then 
  24. call Modify() 
  25. elseif Action="SaveModify" then 
  26. call SaveModify() 
  27. elseif Action="Del" then 
  28. call DeleteClass() 
  29. else 
  30. call main() 
  31. end if 
  32. conn.close 
  33. set conn=nothing 
  34.  
  35. if FoundErr=True then 
  36. call WriteErrMsg() 
  37. end if 
  38.  
  39. sub main() 
  40. dim arrShowLine(10) 
  41. for i=0 to ubound(arrShowLine) 
  42. arrShowLine(i)=False 
  43. next 
  44. dim sqlClass,rsClass,i,iDepth 
  45. sqlClass="select * From zl_class order by RootID,OrderID" 
  46.  
  47. set rsClass=server.CreateObject("adodb.recordset") 
  48. rsClass.open sqlClass,conn,1,1 
  49. %> 
  50. <table width="100%" border="0" cellpadding="2" cellspacing="1" class="border"> 
  51. <tr align="center" class="title"> 
  52. <td width="50%" height="22"><strong>信息分类名称</strong></td> 
  53. <td><strong>操作选项</strong></td> 
  54. </tr> 
  55. <
  56. If Not rsClass.Eof Then 
  57. do while not rsClass.eof 
  58. %> 
  59. <tr class="tdbg"> 
  60. <td> 
  61. <
  62. iDepth=rsClass("Depth") 
  63. if rsClass("NextID")>0 then 
  64. arrShowLine(iDepth)=True 
  65. else 
  66. arrShowLine(iDepth)=False 
  67. end if 
  68. if iDepth>0 then 
  69. for i=1 to iDepth 
  70. if i=iDepth then 
  71. if rsClass("NextID")>0 then 
  72. response.write "<img src='images/tree/tree_line1.gif' width='17' height='16' valign='abvmiddle'>
  73. else 
  74. response.write "<img src='images/tree/tree_line2.gif' width='17' height='16' valign='abvmiddle'>
  75. end if 
  76. else 
  77. if arrShowLine(i)=True then 
  78. response.write "<img src='images/tree/tree_line3.gif' width='17' height='16' valign='abvmiddle'>
  79. else 
  80. response.write "<img src='images/tree/tree_line4.gif' width='17' height='16' valign='abvmiddle'>
  81. end if 
  82. end if 
  83. next 
  84. end if 
  85. if rsClass("Child")>0 then 
  86. response.write "<img src='images/tree/tree_folder4.gif' width='15' height='15' valign='abvmiddle'>
  87. else 
  88. response.write "<img src='images/tree/tree_folder3.gif' width='15' height='15' valign='abvmiddle'>
  89. end if 
  90. if rsClass("Depth")=0 then 
  91. response.write "<b>
  92. end if 
  93. response.write "<a href='?Action=Modify&ClassID=" & rsClass("ClassID") & "' title='" & rsClass("ClassName") & "'>" & rsClass("ClassName") & "</a>
  94. if rsClass("Child")>0 then 
  95. response.write "(" & rsClass("Child") & ")" 
  96. end if 
  97. %> 
  98. </td> 
  99. <td align="center"> 
  100. <a href="?Action=Add&ParentID=<%=rsClass("ClassID")%>">添加子分类</a> 
  101. <a href="?Action=Modify&ClassID=<%=rsClass("ClassID")%>">修改设置</a> | <a href="?Action=Del&ClassID=<%=rsClass("ClassID")%>" onClick="<%if rsClass("Child")>0 then%>return ConfirmDel1();<%else%>return ConfirmDel2();<%end if%>">删除分类</a> </td> 
  102. </tr> 
  103. <
  104. rsClass.movenext 
  105. loop 
  106. Else 
  107. Response.Write("<tr><td class=""tdbg"" height=""22"" colspan=""2"" align=""center"">请先添加分类!</td></tr>") 
  108. End If 
  109. rsClass.close 
  110. set rsClass=nothing 
  111. %> 
  112. </table> 
  113. <script language="JavaScript" type="text/JavaScript"> 
  114. function ConfirmDel1() 
  115. alert("此分类下还有子分类,必须先删除下属子分类后才能删除此分类!"); 
  116. return false; 
  117.  
  118. function ConfirmDel2() 
  119. if(confirm("删除分类将同时删除此分类中的所有信息,并且不能恢复!确定要删除此分类吗?")) 
  120. return true; 
  121. else 
  122. return false; 
  123.  
  124. </script> 
  125. <
  126. end sub 
  127.  
  128. sub AddClass() 
  129. %> 
  130. <table width="100%" border="0" cellpadding="2" cellspacing="1" class="border"> 
  131. <form name="form1" method="post" action="?" onSubmit="return check()"> 
  132. <tr align="center" class="title"> 
  133. <td height="22" colspan="2"><strong>添加分类</strong></td> 
  134. </tr> 
  135. <tr class="tdbg"> 
  136. <td width="40%" align="right"><strong>所属分类</strong><br></td> 
  137. <td> 
  138. <select name="ParentID"> 
  139. <%call ShowClass_Option(0,ParentID)%> 
  140. </select> 
  141. </td> 
  142. </tr> 
  143. <tr class="tdbg"> 
  144. <td height="22" align="right"><strong>分类名称</strong></td> 
  145. <td> 
  146. <input name="ClassName" type="text" size="37" maxlength="20"></td> 
  147. </tr> 
  148.  
  149. <tr class="tdbg"> 
  150. <td colspan="2" align="center"><br> 
  151. <input name="Action" type="hidden" id="Action" value="SaveAdd"> <input name="Add" type="submit" class="button" id="Add" value="添加分类"> 
  152.     <input name="Cancel" type="button" class="button" id="Cancel" onClick="window.location.href='?'" value="取 消"> 
  153. <br> 
  154. <br></td> 
  155. </tr> 
  156. </form> 
  157. </table> 
  158. <script language="JavaScript" type="text/JavaScript"> 
  159. function check() 
  160. if (document.form1.ClassName.value=="") 
  161. alert("分类名称不能为空!"); 
  162. document.form1.ClassName.focus(); 
  163. return false; 
  164. </script> 
  165. <
  166. end sub 
  167.  
  168. sub Modify() 
  169. dim ClassID,sql,rsClass,i 
  170. ClassID=trim(request("ClassID")) 
  171. if ClassID="" then 
  172. FoundErr=True 
  173. ErrMsgErrMsg=ErrMsg & "<br><li>参数不足!</li>
  174. exit sub 
  175. else 
  176. ClassID=CLng(ClassID) 
  177. end if 
  178.  
  179. sql="select * From zl_class where ClassID=" & ClassID 
  180. set rsClass=server.CreateObject ("Adodb.recordset") 
  181. rsClass.open sql,conn,1,3 
  182. if rsClass.bof and rsClass.eof then 
  183. FoundErr=True 
  184. ErrMsgErrMsg=ErrMsg & "<br><li>找不到指定的分类!</li>
  185. else 
  186. %> 
  187. <table width="100%" border="0" cellpadding="2" cellspacing="1" class="border"> 
  188. <form name="form1" method="post" action="?" onSubmit="return check()"> 
  189. <tr class="title"> 
  190. <td height="22" colspan="2" align="center"><strong>修改分类</strong></td> 
  191. </tr> 
  192. <tr class="tdbg"> 
  193. <td width="40%" align="right"><strong>所属分类</strong><br></td> 
  194. <td> 
  195. <
  196. if rsClass("ParentID")<=0 then 
  197. response.write "无(作为一级分类)" 
  198. else 
  199. dim rsParentClass,sqlParentClass 
  200. sqlParentClass="Select * From zl_class where ClassID in (" & rsClass("ParentPath") & ") order by Depth" 
  201. set rsParentClass=server.CreateObject("adodb.recordset") 
  202. rsParentClass.open sqlParentClass,conn,1,1 
  203. do while not rsParentClass.eof 
  204. for i=1 to rsParentClass("Depth") 
  205. response.write "    " 
  206. next 
  207. if rsParentClass("Depth")>0 then 
  208. response.write "└" 
  209. end if 
  210. response.write " " & rsParentClass("ClassName") & "<br>
  211. rsParentClass.movenext 
  212. loop 
  213. rsParentClass.close 
  214. set rsParentClass=nothing 
  215. end if 
  216. %> </td> 
  217. </tr> 
  218. <tr class="tdbg"> 
  219. <td align="right"><strong>分类名称</strong></td> 
  220. <td><input name="ClassName" type="text" value="<%=rsClass("ClassName")%>" size="37" maxlength="20"> 
  221. <input name="ClassID" type="hidden" id="ClassID" value="<%=rsClass("ClassID")%>"></td> 
  222. </tr> 
  223.  
  224. <tr class="tdbg"> 
  225. <td colspan="2" align="center"><br> 
  226. <input name="Action" type="hidden" id="Action" value="SaveModify"> <input name="Submit" type="submit" class="button" id="Submit" value="保存修改结果"> 
  227.     <input name="Cancel" type="button" class="button" id="Cancel" onClick="window.location.href='?'" value="取 消"> 
  228. <br> 
  229. <br></td> 
  230. </tr> 
  231. </form> 
  232. </table> 
  233. <script language="JavaScript" type="text/JavaScript"> 
  234. function check() 
  235. if (document.form1.ClassName.value=="") 
  236. alert("分类名称不能为空!"); 
  237. document.form1.ClassName.focus(); 
  238. return false; 
  239. </script> 
  240. <
  241. end if 
  242. rsClass.close 
  243. set rsClass=nothing 
  244. end sub 
  245. %> 
  246. </body> 
  247. </html> 
    1. <
    2. sub SaveAdd() 
    3. dim ClassID,ClassName,OnElite,OnTop,ClassPicUrl,LinkUrl,PrevOrderID 
    4. dim sql,rs,trs 
    5. dim RootID,ParentDepth,ParentPath,ParentStr,ParentName,MaxClassID,MaxRootID 
    6. dim PrevID,NextID,Child 
    7. FoundErr=False 
    8. ClassName=trim(request("ClassName")) 
    9. if ClassName="" then 
    10. FoundErr=True 
    11. ErrMsgErrMsg=ErrMsg & "<br><li>分类名称不能为空!</li>
    12. end if 
    13. if FoundErr=True then 
    14. exit sub 
    15. end if 
    16.  
    17. set rs = conn.execute("select Max(ClassID) From zl_class") 
    18. MaxClassID=rs(0) 
    19. if isnull(MaxClassID) then 
    20. MaxClassID=0 
    21. end if 
    22. rs.close 
    23. ClassID=MaxClassID+1 
    24. set rs=conn.execute("select max(RootID) From zl_class") 
    25. MaxRootID=rs(0) 
    26. if isnull(MaxRootID) then 
    27. MaxRootID=0 
    28. end if 
    29. rs.close 
    30. RootID=MaxRootID+1 
    31.  
    32. if ParentID>0 then 
    33. sql="select * From zl_class where ClassID=" & ParentID & "" 
    34. rs.open sql,conn,1,1 
    35. if rs.bof and rs.eof then 
    36. FoundErr=True 
    37. ErrMsgErrMsg=ErrMsg & "<br><li>所属分类已经被删除!</li>
    38. end if 
    39. if FoundErr=True then 
    40. rs.close 
    41. set rs=nothing 
    42. exit sub 
    43. else 
    44. RootID=rs("RootID") 
    45. ParentName=rs("ClassName") 
    46. ParentDepth=rs("Depth") 
    47. ParentPath=rs("ParentPath") 
    48. Child=rs("Child") 
    49. ParentPathParentPath=ParentPath & "," & ParentID '得到此分类的父级分类路径 
    50. PrevOrderID=rs("OrderID") 
    51. if Child>0 then 
    52. dim rsPrevOrderID 
    53. '得到与本分类同级的最后一个分类的OrderID 
    54. set rsPrevOrderID=conn.execute("select Max(OrderID) From zl_class where ParentID=" & ParentID) 
    55. PrevOrderID=rsPrevOrderID(0) 
    56. set trs=conn.execute("select ClassID From zl_class where ParentID=" & ParentID & " and OrderID=" & PrevOrderID) 
    57. PrevID=trs(0) 
    58.  
    59. '得到同一父分类但比本分类级数大的子分类的最大OrderID,如果比前一个值大,则改用这个值。 
    60. set rsPrevOrderID=conn.execute("select Max(OrderID) From zl_class where ParentPath like '" & ParentPath & ",%'") 
    61. if (not(rsPrevOrderID.bof and rsPrevOrderID.eof)) then 
    62. if not IsNull(rsPrevOrderID(0)) then 
    63. if rsPrevOrderID(0)>PrevOrderID then 
    64. PrevOrderID=rsPrevOrderID(0) 
    65. end if 
    66. end if 
    67. end if 
    68. else 
    69. PrevID=0 
    70. end if 
    71.  
    72. end if 
    73. rs.close 
    74. else 
    75. if MaxRootID>0 then 
    76. set trs=conn.execute("select ClassID From zl_class where RootID=" & MaxRootID & " and Depth=0") 
    77. PrevID=trs(0) 
    78. trs.close 
    79. else 
    80. PrevID=0 
    81. end if 
    82. PrevOrderID=0 
    83. ParentPath="0" 
    84. end if 
    85.  
    86. sql="Select * From zl_class Where ParentID=" & ParentID & " AND ClassName='" & ClassName & "'
    87. set rs=server.CreateObject("adodb.recordset") 
    88. rs.open sql,conn,1,1 
    89. if not(rs.bof and rs.eof) then 
    90. FoundErr=True 
    91. if ParentID=0 then 
    92. ErrMsgErrMsg=ErrMsg & "<br><li>已经存在一级分类:" & ClassName & "</li>
    93. else 
    94. ErrMsgErrMsg=ErrMsg & "<br><li>“" & ParentName & "”中已经存在子分类“" & ClassName & "”!</li>
    95. end if 
    96. rs.close 
    97. set rs=nothing 
    98. exit sub 
    99. end if 
    100. rs.close 
    101.  
    102. sql="Select top 1 * From zl_class" 
    103. rs.open sql,conn,1,3 
    104. rs.addnew 
    105. rs("ClassID")=ClassID 
    106. rs("ClassName")=ClassName 
    107. rs("RootID")=RootID 
    108. rs("ParentID")=ParentID 
    109. if ParentID>0 then 
    110. rs("Depth")=ParentDepth+1 
    111. else 
    112. rs("Depth")=0 
    113. end if 
    114. rs("ParentPath")=ParentPath 
    115. rs("OrderID")=PrevOrderID 
    116. rs("Child")=0 
    117. rs("PrevID")=PrevID 
    118. rs("NextID")=0 
    119. rs.update 
    120. rs.Close 
    121. set rs=Nothing 
    122.  
    123. '更新与本分类同一父分类的上一个分类的“NextID”字段值 
    124. if PrevID>0 then 
    125. conn.execute("update zl_class set NextID=" & ClassID & " where ClassID=" & PrevID) 
    126. end if 
    127.  
    128. if ParentID>0 then 
    129. '更新其父类的子分类数 
    130. conn.execute("update zl_class set ChildChild=Child+1 where ClassID="&ParentID) 
    131.  
    132. '更新该分类排序以及大于本需要和同在本分类下的分类排序序号 
    133. conn.execute("update zl_class set OrderIDOrderID=OrderID+1 where RootID=" & rootid & " and OrderID>" & PrevOrderID) 
    134. conn.execute("update zl_class set OrderID=" & PrevOrderID & "+1 where ClassID=" & ClassID) 
    135. end if 
    136. Response.Redirect "?" 
    137. end sub 
    138.  
    139. sub SaveModify() 
    140. dim ClassName,OnElite,OnTop,ClassPicUrl,LinkUrl 
    141. dim trs,rs 
    142. dim ClassID,sql,rsClass,i 
    143. FoundErr=False 
    144.  
    145. ClassID=trim(request("ClassID")) 
    146. if ClassID="" then 
    147. FoundErr=True 
    148. ErrMsgErrMsg=ErrMsg & "<br><li>参数不足!</li>
    149. else 
    150. ClassID=CLng(ClassID) 
    151. end if 
    152. ClassName=trim(request("ClassName")) 
    153. OnElite=trim(request("OnElite")) 
    154. OnTop=trim(request("OnTop")) 
    155. ClassPicUrl=trim(request("ClassPicUrl")) 
    156. LinkUrl=trim(request("LinkUrl")) 
    157. if ClassName="" then 
    158. FoundErr=True 
    159. ErrMsgErrMsg=ErrMsg & "<br><li>分类名称不能为空!</li>
    160. end if 
    161.  
    162. if FoundErr=True then 
    163. exit sub 
    164. end if 
    165.  
    166. sql="select * From zl_class where ClassID=" & ClassID 
    167. set rsClass=server.CreateObject ("Adodb.recordset") 
    168. rsClass.open sql,conn,1,3 
    169. if rsClass.bof and rsClass.eof then 
    170. FoundErr=True 
    171. ErrMsgErrMsg=ErrMsg & "<br><li>找不到指定的分类!</li>
    172. rsClass.close 
    173. set rsClass=nothing 
    174. exit sub 
    175. end if 
    176. if rsClass("Child")>0 and LinkUrl<>"" then 
    177. FoundErr=True 
    178. ErrMsgErrMsg=ErrMsg & "<br><li>本分类有子分类,所以不能设为外部链接地址。</li>
    179. end if 
    180. if OnElite="Yes" then 
    181. OnElite=True 
    182. else 
    183. OnElite=False 
    184. end if 
    185. if OnTop="Yes" then 
    186. OnTop=True 
    187. else 
    188. OnTop=False 
    189. end if 
    190. if FoundErr=True then 
    191. rsClass.close 
    192. set rsClass=nothing 
    193. exit sub 
    194. end if 
    195. rsClass("ClassName")=ClassName 
    196. rsClass.update 
    197. rsClass.close 
    198. set rsClass=nothing 
    199. Response.Redirect "?" 
    200. end sub 
    201.  
    202.  
    203. sub DeleteClass() 
    204. dim sql,rs,PrevID,NextID,ClassID 
    205. FoundErr=False 
    206.  
    207. ClassID=trim(Request("ClassID")) 
    208. if ClassID="" then 
    209. FoundErr=True 
    210. ErrMsgErrMsg=ErrMsg & "<br><li>参数不足!</li>
    211. exit sub 
    212. else 
    213. ClassID=CLng(ClassID) 
    214. end if 
    215.  
    216. sql="select * From zl_class where ClassID=" & ClassID 
    217. set rs=server.CreateObject ("Adodb.recordset") 
    218. rs.open sql,conn,1,3 
    219. if rs.bof and rs.eof then 
    220. FoundErr=True 
    221. ErrMsgErrMsg=ErrMsg & "<br><li>分类不存在,或者已经被删除</li>
    222. else 
    223. if rs("Child")>0 then 
    224. FoundErr=True 
    225. ErrMsgErrMsg=ErrMsg & "<br><li>该分类含有子分类,请删除其子分类后再进行删除本分类的操作</li>
    226. end if 
    227. end if 
    228. if FoundErr=True then 
    229. rs.close 
    230. set rs=nothing 
    231. exit sub 
    232. end if 
    233. PrevID=rs("PrevID") 
    234. NextID=rs("NextID") 
    235. if rs("Depth")>0 then 
    236. conn.execute("update zl_class set ChildChild=Child-1 where ClassID=" & rs("ParentID")) 
    237. end if 
    238. rs.delete 
    239. rs.update 
    240. rs.close 
    241. set rs=nothing 
    242.  
    243. '修改上一分类的NextID和下一分类的PrevID 
    244. if PrevID>0 then 
    245. conn.execute "update zl_class set NextID=" & NextID & " where ClassID=" & PrevID 
    246. end if 
    247. if NextID>0 then 
    248. conn.execute "update zl_class set PrevID=" & PrevID & " where ClassID=" & NextID 
    249. end if 
    250. Response.Redirect "?" 
    251. end sub 
    252.  
    253. sub ShowClass_Option(ShowType,CurrentID) 
    254. if ShowType=0 then 
    255. response.write "<option value='0'
    256. if CurrentID=0 then response.write " selected" 
    257. response.write ">-请选择-</option>
    258. end if 
    259. dim rsClass,sqlClass,strTemp,tmpDepth,i 
    260. dim arrShowLine(20) 
    261. for i=0 to ubound(arrShowLine) 
    262. arrShowLine(i)=False 
    263. next 
    264. sqlClass="select * From zl_class order by RootID,OrderID" 
    265. set rsClass=Conn.execute(sqlClass) 
    266. if rsClass.bof and rsClass.eof then 
    267. response.write "<option value=''>请先添加信息分类</option>
    268. else 
    269. do while not rsClass.eof 
    270. tmpDepth=rsClass("Depth") 
    271. if rsClass("NextID")>0 then 
    272. arrShowLine(tmpDepth)=True 
    273. else 
    274. arrShowLine(tmpDepth)=False 
    275. end if 
    276. if ShowType=1 then 
    277. strTemp="<option value='" & rsClass("ClassID") & "'" 
    278. elseif ShowType=2 then 
    279. strTemp="<option value='" & rsClass("ClassID") & "'" 
    280. elseif ShowType=3 then 
    281. if rsClass("Child")>0 then 
    282. strTemp="<option value=''" 
    283. else 
    284. strTemp="<option value='" & rsClass("ClassID") & "'" 
    285. end if 
    286. elseif ShowType=4 then 
    287. if rsClass("Child")>0 then 
    288. strTemp="<option value=''" 
    289. else 
    290. strTemp="<option value='" & rsClass("ClassID") & "'" 
    291. end if 
    292. else 
    293. strTemp="<option value='" & rsClass("ClassID") & "'" 
    294. end if 
    295. if CurrentID>0 and rsClass("ClassID")=CurrentID then 
    296. strTempstrTemp=strTemp & " selected" 
    297. end if 
    298. strTempstrTemp=strTemp & ">
    299.  
    300. if tmpDepth>0 then 
    301. for i=1 to tmpDepth 
    302. strTempstrTemp=strTemp & "   " 
    303. if i=tmpDepth then 
    304. if rsClass("NextID")>0 then 
    305. strTempstrTemp=strTemp & "├ " 
    306. else 
    307. strTempstrTemp=strTemp & "└ " 
    308. end if 
    309. else 
    310. if arrShowLine(i)=True then 
    311. strTempstrTemp=strTemp & "│" 
    312. else 
    313. strTempstrTemp=strTemp & " " 
    314. end if 
    315. end if 
    316. next 
    317. end if 
    318. strTempstrTemp=strTemp & rsClass("ClassName") 
    319. strTempstrTemp=strTemp & "</option>
    320. response.write strTemp 
    321. rsClass.movenext 
    322. loop 
    323. end if 
    324. rsClass.close 
    325. set rsClass=nothing 
    326. end sub 
    327. %>  


    附:表结构(表名为zl_class,以下是其包含字段名和字段类型)
    ClassID ClassName ParentID ParentPath Depth RootID Child PrevID NextID OrderID
    自动编号 文本 数字 文本 数字 数字 数字 数字 数字 数字

  • 疫情期间手机直线:18622734798    服务邮箱:service@nfree.cn     QQ:1448132697
  • 地址:天津市河西区围堤道146号华盛广场B座22楼    

    津公网安备 12010302001042号

  • CopyRight 2006~2024 All Rights Reserved 天津市华易动力信息科技有限公司