如何在Yii2上的GridView上使用buttonOptions

时间:2016-11-24 18:19:43

标签: php yii yii2

我想更改网格视图On YII2

上的默认按钮名称 在Yii 1上我们有这个:

http://www.yiiframew...s-in-cgridview/

array
(
    'class'=>'CButtonColumn',
    'template'=>'{email}{down}{delete}',
    'buttons'=>array
    (
        'email' => array
        (
            'label'=>'Send an e-mail to this user',
            'imageUrl'=>Yii::app()->request->baseUrl.'/images/email.png',
            'url'=>'Yii::app()->createUrl("users/email", array("id"=>$data->id))',
        ),
        'down' => array
        (
            'label'=>'[-]',
            'url'=>'"#"',
            'visible'=>'$data->score > 0',
            'click'=>'function(){alert("Going down!");}',
        ),
    ),
),

我想为Yii2

做类似的事情

现在我想只更改标签。

阅读Yii2的文档我试过了:

[
    'class' => 'yii\grid\ActionColumn',
    'buttonOptions' => [
        [
            'name' => 'update',
            'additionalOptions' => [
                'label' => 'Super Update',
            ]
        ],
        [
            'name' => 'delete',
            'additionalOptions' => [
                'label' => 'Super Delete',
            ]
        ],
    ],
],

但它不起作用。

我知道我可以从头开始重新创建按钮:

'buttons' => [
    'update' => function ($url, $model) {
            $t = 'index.php?r=site/update&id='.$model->id;
            return Html::button('<span class="glyphicon glyphicon-pencil"></span>', ['value'=>Url::to($t), 'class' => 'btn btn-default btn-xs']);
    },
],

但我不想这样做。

谢谢

1 个答案:

答案 0 :(得分:2)

buttonOptions将应用于所有默认按钮,您无法将它们分开,但可以应用常规选项(对所有按钮):

'class' => 'yii\grid\ActionColumn',
'buttonOptions' => [
    'title' => 'This is custom title for default 3 buttons',
 ],

如果要使用自定义HTML选项,则必须创建新类,扩展ActionColumn并覆盖(2)受保护的方法,例如:

<?php

namespace app\models;

use yii\grid\ActionColumn;
use yii\helpers\Html;
use Yii;

class customActionColumn extends ActionColumn
{
    /**
     * Initializes the default button rendering callbacks.
     */
    protected function initDefaultButtons()
    {
        $this->initDefaultButton('view', 'eye-open', [
            'title' => 'Super View',
        ]);
        $this->initDefaultButton('update', 'pencil', [
            'title' => 'Super Update',
        ]);
        $this->initDefaultButton('delete', 'trash', [
            'data-confirm' => Yii::t('yii', 'Are you sure you want to delete this item?'),
            'data-method' => 'post',
            'title' => 'Super Delete'
        ]);
    }

    /**
     * Initializes the default button rendering callback for single button
     * @param string $name Button name as it's written in template
     * @param string $iconName The part of Bootstrap glyphicon class that makes it unique
     * @param array $additionalOptions Array of additional options
     * @since 2.0.11
     */
    protected function initDefaultButton($name, $iconName, $additionalOptions = [])
    {
        if (!isset($this->buttons[$name]) && strpos($this->template, '{' . $name . '}') !== false) {
            $this->buttons[$name] = function ($url, $model, $key) use ($name, $iconName, $additionalOptions) {
                $title = Yii::t('yii', ucfirst($name));
                $options = array_merge([
                    'title' => $title,
                    'aria-label' => $title,
                    'data-pjax' => '0',
                    'title' => 'atata'
                ], $additionalOptions, $this->buttonOptions);
                $icon = Html::tag('span', '', ['class' => "glyphicon glyphicon-$iconName"]);
                return Html::a($icon, $url, $options);
            };
        }
    }
}

现在在GridView中你只需要指定自定义类就可以了。

[
    'class' => app\models\customActionColumn::className(),
],