版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41120504/article/details/85060263
composer安装yii2 - treegrid:composer require --prefer-dist leandrogehlen/yii2-treegrid "*"
或者在composer.json
文件的require部分添加:"leandrogehlen/yii2-treegrid": "*"
分类表:
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;
模型用gii生成
控制器:
public function actionIndex()
{
$query = Category::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => false
]);
return $this->render('index', [
'dataProvider' => $dataProvider
]);
}
视图:
use leandrogehlen\treegrid\TreeGrid;
<?= TreeGrid::widget([
'dataProvider' => $dataProvider,
'keyColumnName' => 'id',
'parentColumnName' => 'parent_id',
'parentRootValue' => '0', //first parentId value
'pluginOptions' => [
'initialState' => 'collapsed',
],
'columns' => [
'cat_name',
'cat_desc',
'parent_id',
'cat_id',
'sort_order',
[
'attribute' => 'is_show',
'label' => '是否在前台显示',
'value' => function($model) {
return $model->show_in_nav == 1 ? "不显示" : "显示";
},
'headerOptions' => ['width' => '132']
],
[
'attribute' => 'show_in_nav',
'label' => '是否在导航栏显示',
'value' => function($model) {
return $model->show_in_nav == 1 ? "不显示" : "显示";
},
'headerOptions' => ['width' => '132']
],
[
'header' => '操作',
'class' => 'yii\grid\ActionColumn',
'headerOptions' => ['width' => '100']
]
]
]); ?>
最后发现查看修改删除ID该列对应不上,重写\vendor\yiisoft\yii2\grid\ActionColumn中的renderDataCellContent,
再创建按钮时返回正确的id
在根目录创建common文件夹,在common中创建components文件夹,创建TreeColumn.php文件
TreeColumn.php:
<?php
namespace app\common\components;
use yii\helpers\Html;
use yii\helpers\Url;
use Yii;
class TreeColumn extends \yii\grid\ActionColumn {
public $template = '{:view} {:update} {:delete}';
/**
* 重写了标签渲染方法。
* @param mixed $model
* @param mixed $key
* @param int $index
* @return mixed
*/
protected function renderDataCellContent($model, $key, $index)
{
return preg_replace_callback('/\\{([^}]+)\\}/', function ($matches) use ($model, $key, $index) {
list($name, $type) = explode(':', $matches[1].':'); // 得到按钮名和类型
if($name == 'view'){
$url = Yii::$app->request->hostInfo.'/product/'.$model->id.'.html';
return call_user_func($this->buttons[$type], $url, $model, $key,$options=['target'=>'_blank']);
}else{
if (!isset($this->buttons[$type])) { // 如果类型不存在 默认为view
$type = 'view';
}
if ('' == $name) { // 名称为空,就用类型为名称
$name = $type;
}
$url = $this->createUrl($name, $model, $key, $index);
return call_user_func($this->buttons[$type], $url, $model, $key);
}
}, $this->template);
}
/**
* 方法重写,让view默认新页面打开
* @return [type] [description]
*/
protected function initDefaultButtons(){
if (!isset($this->buttons['view'])) {
$this->buttons['view'] = function ($url, $model, $key) {
$options = array_merge([
'title' => Yii::t('yii', 'View'),
'aria-label' => Yii::t('yii', 'View'),
'data-pjax' => '0',
//'target'=>'_blank'
], $this->buttonOptions);
return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', '/category/view?id='.$model->id, $options);
};
}
if (!isset($this->buttons['update'])) {
$this->buttons['update'] = function ($url, $model, $key) {
$options = array_merge([
'title' => Yii::t('yii', 'Update'),
'aria-label' => Yii::t('yii', 'Update'),
'data-pjax' => '0',
], $this->buttonOptions);
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', '/category/update?id='.$model->id, $options);
};
}
if (!isset($this->buttons['delete'])) {
$this->buttons['delete'] = function ($url, $model, $key) {
$options = array_merge([
'title' => Yii::t('yii', 'Delete'),
'aria-label' => Yii::t('yii', 'Delete'),
'data-confirm' => Yii::t('yii', 'Are you sure you want to delete this item?'),
'data-method' => 'post',
'data-pjax' => '0',
], $this->buttonOptions);
return Html::a('<span class="glyphicon glyphicon-trash"></span>', '/category/delete?id='.$model->id, $options);
};
}
}
}
?>
视图中操作 'class' => 'yii\grid\ActionColumn', 改为 'class' => 'app\common\components\TreeColumn',
yii开发笔记--- (yii2 - treegrid插件)分页
不用插件:无限极分类