Yii2.0 GridView自定义动作列

用gii生成的CRUD非常方便,index视图自带 查看详情修改删除 三大功能按钮,

但是这三个按钮不一定够用.

例如 我们做文章列表时,可能还会需要 显示(发布)、隐藏(作为草稿) 之类的按钮,这时候我们就需要自定义活动列了.

效果如下:

效果

第一种方法:

首先,新建存放自定义活动列的目录,并新建BlogColumn.php

如:backend/column/BlogColumn.php,

复制 vendor\yiisoft\yii2\grid 下把 ActionColumn.php的全部内容到BlogColumn.php.

修改BlogColumn.php

1. 修改命名空间和类名

命名空间 namespace backend\column;

引用:use yii\grid\Column;

类名:BlogColumn

2. 将 public $template = '{view} {update} {delete}';

换成 public $template = '{view} {update} {delete} {show}'; 顺序自己摆弄.

3. 修改initDefaultButtons()中增加一条

    protected function initDefaultButtons()
    {
        $this->initDefaultButton('view', 'eye-open');
        $this->initShowButton('show', 'eye-open');// 增加这个
        $this->initDefaultButton('update', 'pencil');
        $this->initDefaultButton('delete', 'trash', [
            'data-confirm' => Yii::t('yii', '确定删除吗?'),
            'data-method' => 'post',
        ]);
    }

4.增加方法

protected function initShowButton($name, $iconName, $additionalOptions = [])
{
    if (!isset($this->buttons['show'])) {
        $this->buttons['show'] = function ($url, $model, $key) {
            if($model->status){ // 如果当前文章状态为1(显示)时
                $options = [
                    'title' => '隐藏',
                    'aria-label' => '隐藏',
                    'data-pjax' => '0',
                ];
                $url = Url::to(['change', 'id'=>$key, 'status'=>0]); // 手动生成url
                return Html::a('<button class="btn btn-mini btn-danger" type="button">点击隐藏</button>', $url, $options);
            } else { // 如果当前文章状态为0(隐藏)时
                $options = [
                    'title' => '显示',
                    'aria-label' => '显示',
                    'data-pjax' => '0',
                ];
                $url = Url::to(['change', 'id'=>$key, 'status'=>1]);
                return Html::a('<button class="btn btn-mini btn-success" type="button">点击显示</button>', $url, $options);
            }
        };
    }
}

5.修改相应视图 index.php

// ['class' => 'yii\grid\ActionColumn'], 原始的
['class' => 'backend\column\BlogColumn'],

到此结束了,效果如上 ~.~

参考:

-http://www.kancloud.cn/mokeyjay/yii2/228114

-http://v2.bootcss.com/base-css.html#buttons

第二种方法: (不改源码,推荐)

动作列:

[
    'class' => 'yii\grid\ActionColumn',
    'template' => '{view}{update}{delete}{approve}',
    'buttons' =>
    [
        'approve' = function($url, $model, $key)
        {
            $opentions =
            [
                'title'=>'审核',
                'aria-lable'=>'审核',
                'data-confirm'=>"确定审核通过吗?", //弹框提示
                'data-method' => 'post',
                'data-pjax'=>'0',
            ],
            return Html::a('<span class="glyphicon glyphicon-check"></span>',$url, $options);
            // 可以直接指定$url,也就是处理审核按钮的方法
        }
    ],

]

说明: 动作列的 配置属性

template 定义动作列中有 哪些按钮,大括号 括起来的就是 按钮

这些按钮动作就是 对应的控制器actionID.

{view} => public function actionView($id)

buttons 是一个按钮的 渲染回调函数数组.

数组中的键是 按钮名,并且值是对应的 按钮渲染回调函数.

如上:增加了 {approve} 对应处理审核按钮的方法应该是

在对应的控制器里 public function approve(){}




导航