分類表:
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