Gii默认生成的crud操作虽然简单,但是可定制的灵活性却没那么简便。如果默认的样式勉强够用,推荐使用gii生成,毕竟太便捷了。但是如果需要一些个性的可定制性,就得需要去了解很多额外的东西。这次我们讲解,如何重写默认生成的查看,编辑和删除操作按钮并新增按钮。
// 默认是不需要设置的,默认值是
[
'class' => 'yii\grid\ActionColumn',
'template' => '{view} {update} {delete}'
],
// 可以看到默认的实现方式是:
protected function initDefaultButtons()
{
if (!isset($this->buttons['view'])) {
$this->buttons['view'] = function ($url, $model, $key) {
$options = array_merge([
'class' => 'buttonViewLink',
'title' => Yii::t('yii', '查看'),
'aria-label' => Yii::t('yii', 'View'),
'data-pjax' => '0',
], $this->buttonOptions);
return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, $options);
};
}
}
// 即是使用Bootstrap的字体和样式实现的
因此就可以重写该类,覆盖原来的内容。因为常用的操作就这么多,修改默认样式和增加新按钮相对多些。比如不想用默认的图标,想改成汉字,比如”查看”, “编辑”, “删除”,则只需要改变return的行为就可以,
return Html::a('查看', $url, $options);
如果对框架没有严格的限制,可以直接修改框架源码,但一般不推荐修改框架底层的东西。
// 如果想增加按钮,比如"设置",则需要修改默认的模板,比如:
[
'class' => 'admin\modules\temp\vendor\ActionColumn', // 这个类就需要自己集成该类来实现了
'template' => '{view} {update} {delete} {set}'
],
// 这个类的头部是这样写的:
class ActionColumn extends \yii\grid\ActionColumn
{
// set 是你要新增的按钮
public $template = '{view} {update} {delete} {set}';
function __toString()
{
return $this->template;
}
public function init()
{
parent::init();
}
// 然后把默认的几个复制过来
/**
* Initializes the default button rendering callbacks.
*/
protected function initDefaultButtons()
{
if (!isset($this->buttons['view'])) {
$this->buttons['view'] = function ($url, $model, $key) {
$options = array_merge([
'class' => 'buttonViewLink',
'title' => Yii::t('yii', '查看'),
'aria-label' => Yii::t('yii', 'View'),
'data-pjax' => '0',
], $this->buttonOptions);
return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, $options);
};
}
if (!isset($this->buttons['update'])) {
$this->buttons['update'] = function ($url, $model, $key) {
$options = array_merge([
'class' => 'buttonUpdateLink',
'title' => Yii::t('yii', '编辑'),
'aria-label' => Yii::t('yii', 'Update'),
'data-pjax' => '0',
], $this->buttonOptions);
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, $options);
};
}
if (!isset($this->buttons['delete'])) {
$this->buttons['delete'] = function ($url, $model, $key) {
$options = array_merge([
'class' => 'buttonDeleteLink',
'title' => Yii::t('yii', '删除'),
'aria-label' => Yii::t('yii', 'Delete'),
'data-confirm' => Yii::t('yii', '确定要删除该条记录吗?'),
'data-method' => 'post',
'data-pjax' => '0',
], $this->buttonOptions);
return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, $options);
//return Html::a('删除', $url, $options);
};
}
// 然后在这里新增自己的自定义按钮
if (!isset($this->buttons['set'])) {
$this->buttons['set'] = function ($url, $model, $key) {
$options = array_merge([
'title' => \Yii::t('yii', '设置'),
'aria-label' => \Yii::t('yii', 'Update'),
'data-pjax' => '0',
'class' => 'tags', // 还可以顺带自定义一些标签属性
], $this->buttonOptions);
return Html::a('设置', $url, $options);
};
}
}
// 如此一来就达到了重写gii默认外观的目的。
}