yii学习笔记--- 无限极分类

分类表:

DROP TABLE IF EXISTS `shop_category`;
CREATE TABLE `shop_category` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `cat_name` varchar(90) NOT NULL DEFAULT '' COMMENT '分类名称',
  `cat_desc` varchar(255) NOT NULL DEFAULT '' COMMENT '分类描述',
  `parent_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父ID',
  `sort_order` int(4) unsigned NOT NULL DEFAULT '50' COMMENT '显示排序,数字越大越后',
  `is_show` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否在前台显示 (0:显示 1:不显示)',
  `icon_url` varchar(255) NOT NULL COMMENT '图标地址',
  `show_in_nav` tinyint(1) DEFAULT '0' COMMENT '是否在导航栏显示(0:显示 1:不显示)',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM AUTO_INCREMENT=10008 DEFAULT CHARSET=utf8;

模型:

    //如果return返回getTree()函数就直接在视图中遍历输出
    //如果return返回list_level()函数在视图遍历分类输出格式为:
    //<td><?php echo str_repeat('-- ',$value['level']);?><?php echo $value['cat_name']?></td>
    public function sel_all()
    {
        $arr = self::find()->asArray()->all();
        //return self::list_level($arr, $pid = 0, $level = 0 );
        return self::getTree($arr, $pid = 0, $level = 0 );
    }
    public function list_level($arr, $pid = 0, $level = 0)
    {
        static $data = array();
        foreach($arr as $k => $v){
            if($v['parent_id'] == $pid){
                $v['level'] = $level;
                $data[] = $v;
                $this->list_level($arr,$v['id'],$level+1);
            }
        }
        return $data;
    }
    /**
     * 获取所有的分类
     */
    public function getCategories()
    {
        $data = self::find()->all();
        $data = ArrayHelper::toArray($data);
        return $data;
    }

    /**
     *遍历出各个子类 获得树状结构的数组
     */
    public static function getTree($data,$pid = 0,$lev = 1)
    {
        $tree = [];
        foreach($data as $value){
            if($value['parent_id'] == $pid){
                $value['cat_name'] = str_repeat('---- ',$lev).$value['cat_name'];
                $tree[] = $value;
                $tree = array_merge($tree,self::getTree($data,$value['id'],$lev+1));
            }
        }
        return $tree;
    }

    /**
     * 得到相应  id  对应的  分类名  数组
     */
    public function getOptions()
    {
        $data = $this->getCategories();
        $tree = $this->getTree($data);
        $list = ['添加顶级分类'];
        foreach($tree as $value){
            $list[$value['id']] = $value['cat_name'];
        }
        return $list;
    }

控制器:

 /**
     * Lists all Category models.
     * @return mixed
     */
    public function actionIndex () {
        $model = new Category();
        $data = $model->sel_all();
        return $this->render('index', [
            'data' => $data,
        ]);
    }

视图:

 <?php foreach($data as $value){ ?>
                <tr data-key="9">
                    <td><?php echo $value['id']?></td>
<!--                    <td>--><?php //echo str_repeat('-- ',$value['level']);?><!----><?php //echo $value['cat_name']?><!--</td>-->
                    <td><?php echo $value['cat_name']?></td>
                    <td><?php echo $value['cat_desc']?></td>
                    <td><?php echo $value['parent_id']?></td>
                    <td><?php echo $value['sort_order']?></td>
                    <td><?php if($value['is_show'] == 0){echo '显示';}else{echo '不显示';}?></td>
<!--                    <td>--><?php //echo $value['icon_url']?><!--</td>-->
                    <td><?php if($value['show_in_nav'] == 0){echo '显示';}else{echo '不显示';}?></td>
                    <td>
                        <a href="/category/view?id=<?php echo $value['id']?>" title="查看" aria-label="查看" data-pjax="0">
                            <span class="glyphicon glyphicon-eye-open"></span>
                        </a>
                        <a href="/category/update?id=<?php echo $value['id']?>" title="更新" aria-label="更新" data-pjax="0">
                            <span class="glyphicon glyphicon-pencil"></span>
                        </a>
                        <a href="/category/delete?id=<?php echo $value['id']?>" title="删除" aria-label="删除" data-pjax="0" data-confirm="您确定要删除此项吗?" data-method="post">
                            <span class="glyphicon glyphicon-trash"></span>
                        </a>
                    </td>
                </tr>
            <?php }?>

效果图:

 

无限极分类yii2 - treegrid插件https://blog.csdn.net/weixin_41120504/article/details/85060263

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章