<?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>
}