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

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