解决:1,缩进问题????2,排序问题
递归查询的过程。
按照节点的父子关系(上下级关系)查找的分类的过程。
从,parent id==0的分类开始,查找其子分类。
利用当前找到的分类的ID作为条件查找条件parent id == ID,找到该分类的子类。
当找到每个子分类时,利用该查找的子分类,再向下找该子分类的子分类。
是一个递归查询的过程,查找条件当前分类的ID,去其他的分类 parent id 做比较。
利用一个递归的程序,完成无限分类的展示树状列表实现:
递归点:查找任意分类的子分类的操作方式一致的。
递归出口:当一个分类下没有子分类时,不需要做递归调用。没有找到parent id 与当前分类ID相等的记录。
编程实现:定义一个可以被递归调用的函数。参数有哪些?查找id。所有可能的分类数据数组,fetchAll(),二维包含了所有数据的数组。
处理返回值:定义一个数组,保存每次查找的记录。最好采用一个静态的局部变量,可以在递归调用中,可以共享数组。
Tips:可以使用引用传递 $row 节省参数的传递空间,提高执行效率。
????模拟一下递归的调用执行
????缩进的级别????与????找到该分类的递归调用函数的深度是一致的。
????记录下来递归调用的深度。为函数增加一个参数,每当递归调用,则参数值+1
????
????将深度记录到tree数组内的每个元素上:
????
????修改模型,增加一个可以获得分类树状列表数据的方法model/CategoryModel.class.php
????
????增加getTree排序,缩进级别数据
????
????在控制器中,调用getTreeList()得到分类数据
????controller/back/CategoryController.class.php????listAction()
????
????在视图模板输出分类名称前,增加缩进的空格view/back/cat_list.html
????利用函数str_repeat();可以重复某个字符串N次:重复的结果 = str_repeat(字符串,次数)
????应该由:添加表单,处理添加数据
????back/CategoryController????addAction();
????
????需要,但是已经存在。
????增加一个cat_add.html模板????view/back/cat_add.html????表单的请求action:
????
????循环输出所有的分类:
????
????在列表页右上角,点击进入到添加分类:
????controller/back/CategoryController.class.php????insertAction();
????
????model/CategoryModel????增加一个indertCat方法
????
????没有视图层参与????测试
????提示:分类名不能为空。分类名不能再同一个分类下重复。
????由模型层来实现:提升insertCat()这个模型方法:????model/CategoryModel
????此时需要处理错误,错误由模型发现,由控制器提示给用户。
????要模型层将错误原因传递给控制器
????在所有的模型上增加一个保存的错误信息的属性
????在基础模型类上做增加
????framework/Model.class.php
????
????发生错误后,记录信息到该属性上:
????model/CategoryModel
????
????此时控制器判断,是否成功,失败的话,利用模型得到错误信息,给出用户提示:
????controller/back/CateforyController????insertAction()
????
分类的编辑
????controller/back/CategoryController????editAction()
????
????model/CategoryModel????增加一个getById的方法
????
????增加一个编辑模板????view/back/cat_edit.html????form的action:
????
????展示原始数据:
????
????
????应该将当前分类的cat_id,作为隐藏于向下传递
????
????在列表页面,为每个分类增加一个编辑连接,将分类的id传递:view/back/cat_list.html
????
????
????CategoryController????updateAction()
????
????CategoryModel????updateCat()
????需要的业务逻辑是,要求不能将parent_id修改为其子分类的:
????
????
????没有视图参与
????CategoryController????removeAction()
????
????CategoryModel????removeCat()
????
????典型的,不能删除存在子类的分类
????
????不需要
????在列表页面增加链接
????移除的确认
????