Ответ 1
Просто добавьте
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',
])
: '';
Я хочу скрыть кнопки Yii2 GridView Action Column на основе состояния поля модели. Если status = 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;
}
],
Просто добавьте
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',
])
: '';
Вы можете использовать ['class' => ActionColumn::className(),'template'=>'{view} {update}' ]
на вашем экране сетки.
Использовать свойство visibleButtons из класса ActionColumn:
[
'class' => 'yii\grid\ActionColumn',
'visibleButtons' => [
'view' => function ($model, $key, $index) {
return $model->status === 1 ? false : true;
}
]
]
Ссылка http://www.yiiframework.com/doc-2.0/yii-grid-actioncolumn.html# $visibleButtons-detail
В 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\ lists'),
]);
}
],
'urlCreator' => function ($action, $model, $key, $index) {
if ($action === 'today_action') {
return Url::to(['customers/today']);
}
}
],
Я использую расширение kartik, но отлично работает с yii
вам нужно добавить шаблон spiety ('template' = > '{update} {delete}') в столбец arry, где вы помещаете опции
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'otherfield'
['class' => 'yii\grid\ActionColumn','template'=>'{update} {delete}'],
Это то, что я сделал https://github.com/Mihai-P/yii2theme-brain/blob/master/widgets/ActionColumn.php. Я расширил класс ActionColumn и использовал свой собственный, а не стандартный. у моего класса есть больше вещей, таких как проверка прав доступа и отображение только тех кнопок, к которым у них есть доступ, вы можете игнорировать эту часть и просто использовать способ проверки способа проверки модели. Я считаю это более многоразовым, чем писать код в представлении. Если вы начнете писать код в представлении, вам придется писать один и тот же код снова и снова для каждого экрана.
Я уверен, что вы также можете делать то, что хотите внутри представления, попробуйте использовать
'template' => function ($model) {
.............
}
И верните либо '{view} {delete}', либо '{delete}'
Его работы для меня:
'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';
этот работал у меня. полный код 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;
}
}
],
Вам нужно изменить только одну строку.
Заменить:
'template' => '{update} {delete}',
Это можно сделать так:
[
'class' => 'yii\grid\ActionColumn',
'contentOptions' => [],
'header'=>'Actions',
'template' => '{view} {update} {delete}',
'visibleButtons'=>[
'view'=> function($model){
return $model->status!=1;
},
]
],