一、解决删除上级目录,其子目录仍有内容,
/*
1 要判断该栏目是否有子栏目,如果有子栏目,不能删除
思路:无限极分类,查子栏目,子孙栏目,家谱树
可以在model里写一个方法,查子栏目,判断是否有子栏目
*/
修改CatModel.class.php ,增加查找子栏目功能
public function getSon($id){ $sql = 'select cat_id,cat_name,parent_id from '.$this->table.' where parent_id = '.$id; return $this->db->getAll($sql); } |
修改catedel.php,增加判断是否有子栏目
$res = $cat->getSon($cat_id); if (!empty($res)) { exit('有子栏目删除失败!'); } |
二 解决:栏目编辑,栏目选择上的混乱
一个栏目A,不能修改成A的子孙栏目的子栏目
思考:
如果B是A的后代,则A不能成为B的子栏目
反之,如果B是A的后代,则A是B 的祖先
因此,我们为A设定一个新的父栏目时,设为N
先查找N的家谱树,
如果N 的家谱树里,如果有A ,那么子孙差辈了
修改CatModel.class.php ,增加查找家谱树功能
//查找家谱树 public function getTree($id){ $trees = array(); $res = $this->select(); while ($id>0) { foreach($res as $v){ if ($v['cat_id'] == $id) { $trees[] = $v; $id = $v['parent_id']; break; } } } return $trees; } |
修改cateditAct.php ,增加判断在新选择的父栏目的家谱树中,是否存在子栏目
//查找新父栏目的家谱树 $trees = $cat->getTree($data['parent_id']); //判断自身是否在新父栏目的家谱树中 //如果存在,那么自身就是新父栏目的父栏目,不允许修改 $flag = true; foreach($trees as $v){ if ($v['cat_id'] == $cat_id) { $flag = false; break; } } if (!$flag) { echo "父栏目选取失败"; exit; } |