热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

打造PHP的无限分级类(完整代码及注释)_PHP教程

打造PHP的无限分级类(完整代码及注释)。下面提供一个PHP的无限分级类代码,想要实现无限分级类的朋友们可以试试。Bug已经检查修正过,直接复制代码就能使用尖括号需要替换一
下面提供一个PHP的无限分级类代码,想要实现无限分级类的朋友们可以试试。Bug已经检查修正过,直接 就能使用尖括号需要替换一下)。

1、数据库ProductShow中有b_mtype表,建表语句如下:

  1. CREATE TABLE `b_mtype` (
  2. `typeid` int(4) NOT NULL default '0',
  3. `typename` varchar(50) NOT NULL default '',
  4. `parentid` int(4) NOT NULL default '0',
  5. `parentstr` varchar(200) NOT NULL default '',
  6. `depth` int(4) NOT NULL default '0',
  7. `rootid` int(4) NOT NULL default '0',
  8. `child` varchar(200) NOT NULL default '',
  9. `orders` varchar(200) NOT NULL default '',
  10. PRIMARY KEY (`typeid`)
  11. ) TYPE=MyISAM;

2、ProductClass.php代码:直接复制即可)

  1. "Content-Type" cOntent="text/html; charset=gb2312" />
  2. ini_set("error_reporting","E_ALL & ~E_NOTICE");//忽略所有警告信息
  3. require_once("conn.php");//嵌入连接文件
  4. @$ToDo=$_GET["ToDo"];
  5. switch($ToDo)
  6. {
  7. case "add":
  8. echo add();
  9. break;
  10. case "edit":
  11. echo edit();
  12. break;
  13. case "saveadd":
  14. echo saveadd();
  15. break;
  16. case "saveedit":
  17. echo saveedit();
  18. break;
  19. case "del":
  20. echo del();
  21. break;
  22. default:
  23. ?>
  24. "90%" border="0" align="center" cellpadding="0" cellspacing="0" class="tblborder">
  25. "top">"100%" border="0" cellspacing="1" cellpadding="3">
  26. "55%" height="20" align="center" bgcolor="#698FC7">class="tblhead">class="STYLE2">商品类别设置 "?ToDo=add">添加一个新类别
  27. "100%" bgcolor="#cccccc" cellspacing="1" cellpadding="3">
  28. "#F9F9F9">
  29. $query=mysql_query("select * from b_mtype order by rootid,orders");
  30. while($arr=mysql_fetch_array($query))
  31. {
  32. ?>
  33. }
  34. ?>
  35. "6%" height="21">ID "49%">类别名称 "14%">排序 "31%">操作
    "#FFFFFF">echo $arr["typeid"];?> "#FFFFFF">if ($arr["depth"]>0) {
  36. for($i=1;$i<=$arr["depth"];$i++){ echo " ";}
  37. }?>
  38. if($arr["child"]>0) { echo "+";}else {echo "-";}?>
  39. if($arr["parentid"]==0) { echo "";}?>
  40. echo $arr["typename"];?>
  41. if ($arr["child"]>0) {?>(echo $arr["child"];?>)
  42. "#FFFFFF">echo $arr["orders"];?> "#FFFFFF">"?ToDo=add&editid=typeid"];?>">添加子类
  43. | "?ToDo=edit&editid=typeid"]?>">编辑类别
  44. | if($arr["child"]==0){?>"?ToDo=del&editid=typeid"];?>" OnClick="{if(confirm('删除类别时,该类别下的所有产品将一并被删除,确定删除吗?')){return true;}return false;}">删除类别else{?>"#" OnClick="{if(confirm('该类别含有下属类别,必须先删除其下属类别方能删除本类别!')){return true;}return false;}">删除类别 
  45. break;
  46. }
  47. ?>
  48. ///增加类别
  49. function add(){
  50. @$editid=$_REQUEST["editid"];
  51. ?>
  52. "form1" method="post" action="?ToDo=saveadd">
  53. "90%" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
  54. "#CCCCCC">
  55. "2" align="center" bgcolor="#698FC7">class="STYLE2">创建新的类别
    "25%" bgcolor="#FFFFFF">类别名称: "75%" bgcolor="#FFFFFF">"typename" type="text" id="typename">
    "25%" height=30 bgcolor="#FFFFFF">所属类别 "75%" bgcolor="#FFFFFF">
  56. "#FFFFFF" "#FFFFFF">"submit" name="Submit" value="保存">
  57. "button" name="cancel" id="cancel" value="返回" Onclick="history.go(-1);" />
  58. /////保存增加的类别
  59. function saveadd(){
  60. $query=mysql_query("select typeid from b_mtype order by typeid desc limit 1");
  61. while($arr=mysql_fetch_array($query)){
  62. if (!$arr["typeid"]){
  63. $postnum=1;
  64. }else{
  65. $postnum=$arr["typeid"]+1;
  66. }
  67. }
  68. if(!$postnum) $postnum=1;
  69. $ntid =$postnum;
  70. $tn =$_REQUEST["typename"];
  71. $btype =$_REQUEST["btype"];
  72. //echo $btype;
  73. if ($ntid=="" or $tn=="")
  74. {
  75. echo "";
  76. die();
  77. }
  78. if ($btype!=0){
  79. $result=mysql_query("select rootid,typeid,depth,orders,parentstr from b_mtype where typeid='$btype'");
  80. $aa=mysql_fetch_array($result);
  81. $rootid=$aa['rootid'];
  82. //echo "aaaaaaaaaaa";
  83. $parentid=$aa['typeid'];
  84. $depth=$aa['depth'];
  85. $orders=$aa['orders'];
  86. $parentstr=$aa['parentstr'];
  87. //echo $rootid;
  88. if(($aa["depth"]+1)>20){ die("本分类限制最多只能有20级分类"); }
  89. }
  90. if($ntid == $btype)
  91. {
  92. echo "";
  93. die();
  94. }
  95. if($btype!=0){
  96. $depth=$depth+1;
  97. $rootid=$rootid;
  98. $orders =$ntid;
  99. $parentid =$btype;
  100. //$child = $child;
  101. if ($parentstr=="0"){
  102. $parentstr=$btype;
  103. }else{
  104. $parentstr=$parentstr.",".$btype;
  105. }
  106. }else{
  107. $depth=0;
  108. $rootid=$ntid;
  109. $orders=1;
  110. $parentid=0;
  111. $child=0;
  112. $parentstr=0;
  113. }
  114. //插入类别
  115. $query=mysql_query("insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')") ;
  116. //用于调试 echo "insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')";
  117. if ($btype!=0)
  118. {
  119. if ($depth>0)
  120. {
  121. //当上级分类深度大于0的时候要更新其父类或父类的父类)的版面数和相关排序
  122. for ($i=1;$i<=$depth;$i++){
  123. //更新其父类版面数
  124. if ($parentid!=""){
  125. $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");
  126. }
  127. //得到其父类的父类的版面ID
  128. $result=mysql_query("select parentid from b_mtype where typeid='$parentid'");
  129. $par=mysql_fetch_array($result);
  130. if ($par['parentid']!=""){
  131. $parentid=$par['parentid'];
  132. }
  133. //当循环次数大于1并且运行到最后一次循环的时候直接进行更新
  134. if ($i==$depth && $parentid!=""){
  135. $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");
  136. }
  137. }//for循环结束
  138. //更新该版面排序以及大于本需要和同在本分类下的版面排序序号
  139. $query=mysql_query("update b_mtype set orders=orders+1 where rootid='$rootid' and orders>'$orders'");
  140. //$orders1=$orders+1;
  141. //echo "orders1=".$orders1;
  142. $query=mysql_query("update b_mtype set orders='$orders'+1 where typeid='$ntid'");
  143. }else{ //对应if ($depth>0),当上级分类深度为0的时候只要更新上级分类版面数和该版面排序序号即可
  144. $query=mysql_query("update b_mtype set child=child+1 where typeid='$btype'");
  145. $result=mysql_query("select max(orders) from b_mtype where typeid='$ntid'");
  146. $ord=mysql_fetch_array($result);
  147. $query=mysql_query("update b_mtype set orders='$ord[0]'+1 where typeid='$ntid'");
  148. }
  149. }
  150. echo "";
  151. }
  152. ?>
  153. ////修改设置
  154. function edit(){
  155. //global $db,$editid,$tn,$arr;
  156. $editid=$_REQUEST["editid"];
  157. $result=mysql_query("select * from b_mtype where typeid='$editid'");
  158. $tn=mysql_fetch_array($result);
  159. ?>
  160. "form2" action ="?ToDo=saveedit" method="post">
  161. "hidden" name="editid" value="">
  162. "90%" border="0" align=center cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
  163. "#698FC7" class="STYLE2">编辑类别:echo $tn["typename"];?>
    "44%" height=30 bgcolor="#FFFFFF">类别名称 "56%" bgcolor="#FFFFFF">
  164. "text" name="typename" size="35" value="typename"];?>">
  165. "44%" height=30 bgcolor="#FFFFFF">

    所属类别

  166. class="STYLE1">特别提示:

  167. 所属类别不能指定当前类别(即自己)为父类别
  168. 所属类别不能指定当前类别的子类别为父类别

  169. "56%" bgcolor="#FFFFFF">
  170. "44%" height=2
    推荐阅读
    • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
    • egg实现登录鉴权(七):权限管理
      权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
    • Windows环境下Oracle数据库迁移实践
      本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
    • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
    • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
    • JavaScript 中引号的多层嵌套使用技巧
      本文详细介绍了在 JavaScript 编程中如何处理引号的多级嵌套问题,包括双引号、单引号以及转义字符的正确使用方法。 ... [详细]
    • 解决UIScrollView自动偏移问题的方法
      本文介绍了一种有效的方法来解决在使用UIScrollView时出现的自动向下偏移的问题,通过调整特定的属性设置,可以确保滚动视图正常显示。 ... [详细]
    • 如何高效渲染JSON数据
      本文介绍了在控制器中返回JSON结果的方法,并详细说明了如何利用jQuery处理和展示这些数据,为Web开发提供了实用的技巧。 ... [详细]
    • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
    • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
    • 深入解析Unity3D游戏开发中的音频播放技术
      在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
    • 本文提供了处理WordPress网站中出现过多重定向问题的方法,包括检查DNS配置、安装SSL证书以及解决数据库连接错误等步骤。 ... [详细]
    • 解决ADODB连接Access时出现80004005错误的方法
      本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
    • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
    • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
    author-avatar
    mobiledu2502886077
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有