隐藏 Yii2 GridView 操作按钮
Posted
技术标签:
【中文标题】隐藏 Yii2 GridView 操作按钮【英文标题】:Hide Yii2 GridView Action buttons 【发布时间】:2015-01-24 08:54:18 【问题描述】:我想在模型字段状态的基础上隐藏 Yii2 GridView Action Column 按钮。 如果状态为 = 1,则仅隐藏视图按钮。 怎么办?
代码:
[
'class' => 'yii\grid\ActionColumn',
'contentOptions' => ['style' => 'width:260px;'],
'header'=>'Actions',
'template' => 'view delete',
'buttons' => [
//view button
'view' => function ($url, $model)
return html::a('<span class="fa fa-search"></span>View', $url, [
'title' => Yii::t('app', 'View'),
'class'=>'btn btn-primary btn-xs',
]);
,
],
'urlCreator' => function ($action, $model, $key, $index)
if ($action === 'view')
$url ='/jobs/view?id='.$model->jobid;
return $url;
],
【问题讨论】:
github.com/yiisoft/yii2/blob/… 只需添加return $model->status == 1 ? Html::a('<span class="fa fa-search"></span>View', $url, [ 'title' => Yii::t('app', 'View'), 'class'=>'btn btn-primary btn-xs', ]) : '';
你的代码对我有用,谢谢
你能把你的评论改成下面的答案吗?
【参考方案1】:
这就是我所做的https://github.com/Mihai-P/yii2theme-brain/blob/master/widgets/ActionColumn.php 简而言之,我扩展了 ActionColumn 类并使用我自己的而不是默认的。 我的班级有更多的东西,比如检查访问权限并只显示他们可以访问的按钮,你可以忽略那部分,只使用检查模型的方法。我认为这比在视图中编写代码更可重用。如果您开始在视图中编写代码,那么您必须为每个屏幕一遍又一遍地编写相同的代码。
我相信你也可以在视图中做你想做的事情,尝试使用
'template' => function ($model)
.............
并返回“view delete”或“delete”
【讨论】:
【参考方案2】:Read
只需添加
return $model->status == 1
? Html::a('<span class="fa fa-search"></span>View', $url, [
'title' => Yii::t('app', 'View'),
'class' =>'btn btn-primary btn-xs',
])
: '';
【讨论】:
【参考方案3】:它对我有用:
'buttons' => [
'view' => function ($url, $model)
return $model->status == '' ? Html::a('<span class="fa fa-paperclip fa-fw fa-border"></span>', $url, [
'title' => Yii::t('app', 'Visualizar'),
//'class'=>'btn btn-primary btn-xs',
]) : '';
,
等同于: return $model->status == '' ? 'show_action_here' : 'no_show';
【讨论】:
yes...与:return $model->status == '' 相同? “是”:“否”;【参考方案4】:在 yii2 中使用return Url::to(['controler/action']);
一共
[
'class' => 'kartik\grid\ActionColumn',
'template' => 'today_action',
'buttons' => [
'today_action' => function ($url, $model)
return Html::a('<span class="glyphicon glyphicon-check"></span>', $url,
[
'title' => Yii::t('app', 'Change today\'s lists'),
]);
],
'urlCreator' => function ($action, $model, $key, $index)
if ($action === 'today_action')
return Url::to(['customers/today']);
],
我正在使用 kartik 扩展,但在 yii 上可以正常工作
【讨论】:
【参考方案5】:你可以使用
['class' => ActionColumn::className(),'template'=>'view update' ]
在您的网格视图上。
【讨论】:
【参考方案6】:使用来自ActionColumn
类的visibleButtons
属性:
[
'class' => 'yii\grid\ActionColumn',
'visibleButtons' => [
'view' => function ($model, $key, $index)
return $model->status !== 1;
]
]
参考:https://www.yiiframework.com/doc/api/2.0/yii-grid-actioncolumn#$visibleButtons-detail
【讨论】:
【参考方案7】:这个对我有用。完整的ActionColumn代码
[
'class' => 'yii\grid\ActionColumn',
'contentOptions' => ['style' => 'width:260px;'],
'header'=>'Actions',
'template' => 'view',
'buttons' => [
//view button
'view' => function ($url, $model)
return Html::a('<span class="fa fa-search"></span>View', $url,
[ 'title' => Yii::t('app', 'View'), 'class'=>'btn btn-primary btn-xs', ]) ;
,
],
'urlCreator' => function ($action, $model, $key, $index)
if ($action === 'view')
$url = \yii\helpers\Url::toRoute(['general-info/viewalldetails', 'id' => $key]);
return $url;
],
【讨论】:
【参考方案8】:您需要将模板属性 ('template'=>'update delete') 添加到放置选项的列中
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'otherfield'
['class' => 'yii\grid\ActionColumn','template'=>'update delete'],
【讨论】:
【参考方案9】:你只需要改变一行。
替换:
'template' => 'update delete',
与:
'template' => function($model)
return ($model->status==1)?'update delete':'view update delete';
,
【讨论】:
【参考方案10】:可以这样实现
[
'class' => 'yii\grid\ActionColumn',
'contentOptions' => [],
'header'=>'Actions',
'template' => 'view update delete',
'visibleButtons'=>[
'view'=> function($model)
return $model->status!=1;
,
]
],
【讨论】:
不知道 visibleButtons 数组 - 干净整洁。谢谢。 非常感谢。在这里的所有答案中,它对我帮助最大!以上是关于隐藏 Yii2 GridView 操作按钮的主要内容,如果未能解决你的问题,请参考以下文章