I want to hide Yii2 GridView Action Column buttons on the base of model field status. If status is = 1 then hide view button only. How I can?
Code:
Use visibleButtons
property from ActionColumn
class:
[
'class' => 'yii\grid\ActionColumn',
'visibleButtons' => [
'view' => function ($model, $key, $index) {
return $model->status !== 1;
}
]
]
Reference: https://www.yiiframework.com/doc/api/2.0/yii-grid-actioncolumn#$visibleButtons-detail
Its works for me:
'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',
]) : '';
},
is the same as: return $model->status == '' ? 'show_action_here' : 'no_show';
Read
Just add
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',
])
: '';
In yii2 use return Url::to(['controler/action']);
altogether
[
'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']);
}
}
],
I am using kartik extension but works fine with yii