<?php /** * 无限级分类 * 栏目的编辑 */ //M层写方法 class CatModel extends Model{ protected $cats = array();//声明空数组 public function __construct(){ parent::__construct();//调用父类的方法,自动执行 $this->cats = $this->select();//将获取到的所有数据放到空数组 } public function getTree($parent_id=0,$lev=0){ $tree = array();//声明空数组 foreach($this->cats as $k=>$v){//遍历获取的数据 if($v['parent_id'] == $parent_id){//若该数据的parent_id=$parent_id $v['lev'] = $lev;//获取到的第一层为$lev $tree[] = $v;//将该值放到数组中 //获取的到的值是否还存在下级,若存在调用自身 $tree = array_merge($tree,$this->getTree($v['cat_id'],$lev+1)); } } return $tree; } } //C层中调用该方法 class CatController extends Controller{ /** * 添加分类页 * str_repeat()吧字符串制定重复的次数 */ public function catAdd(){ $catModel = D('cat');//实例化 $catModel->getTree();//调用无限极分类方法,可自动执行获取所有数据 $this->assign('cat',$catModel);//分配数据到前台页面 $this->display(); } //修改前台页面catadd.html <option value="0">选择分类</option> <foreach name="cat" item="cat"> <option value="{$cat['cat_id']}"><?php echo str_repeat(' ',$cat['lev']),$cat['cat_name']?></option> </foreach> /** * 栏目列表页 */ $catModel = D('cat');//实例化 $catlist->getTree();//调用无限极分类方法,可自动执行获取所有数据 $this->assign('catlist',$catlist);//分配数据到前台页面 $this->display(); //修改前台模板catlist.html style="margin-left:{$catlist['lev']*2}em" /** * 栏目编辑页 */ public function catedit(){ $catModel = D('cat'); if(!IS_POST){//若为空,则展示该条数据 $cat=$catModel->getTree();//调用getTree()方法 // print_r($catModel->select());exit; $cat_id = I('get.cat_id'); $catinfo=$catModel->find($cat_id); // print_r($catinfo);exit; $this->assign('cat',$cat); $this->assign('catinfo',$catinfo); $this->display(); }else{//若有数据则提交更改的数据 //因提交的数据id无法做出更改,此时利用隐藏域将id传过去 // var_dump($_POST);exit; //根据id改,此时提交没有id $catModel->where('cat_id='.$_POST['cat_id'])->save($_POST); $this->redirect('Admin/cat/catlist'); } } //修改前台页面 <option value="0">选择分类</option> <foreach name="cat" item="cat"> //若当前循环的cat_id == 该栏目下的parent_id,则selected <option value="{$cat['cat_id']}" {$cat['cat_id'] == $catinfo['parent_id']?'selected':''}><?php echo str_repeat(' ',$cat['lev']),$cat['cat_name']?></option> </foreach> }