无限级分类--栏目CRUD

本文介绍了一种使用PHP实现无限级分类的方法,通过定义一个模型类并覆盖构造函数来自动生成所有层级的数据,然后通过递归函数获取子级节点,最终在控制器中调用此方法并传递给视图进行展示。
<?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('&nbsp;',$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('&nbsp',$cat['lev']),$cat['cat_name']?></option>
    </foreach>    
    




}

 

转载于:https://www.cnblogs.com/sunyisatan/p/7128047.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值