Je veux masquer les boutons de colonne d'action Yii2 GridView sur la base du statut du champ de modèle . Si le statut est = 1, masque uniquement le bouton d'affichage . Comment puis-je?
Code:
[
'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;
}
],
Il suffit d'ajouter
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',
])
: '';
Vous pouvez utiliser ['class' => ActionColumn::className(),'template'=>'{view} {update}' ]
sur votre gridview.
Utilisez la propriété visibleButtons
de la classe ActionColumn
:
[
'class' => 'yii\grid\ActionColumn',
'visibleButtons' => [
'view' => function ($model, $key, $index) {
return $model->status !== 1;
}
]
]
Référence: https://www.yiiframework.com/doc/api/2.0/yii-grid-actioncolumn#$visibleButtons-detail
Cela peut être fait comme ça
[
'class' => 'yii\grid\ActionColumn',
'contentOptions' => [],
'header'=>'Actions',
'template' => '{view} {update} {delete}',
'visibleButtons'=>[
'view'=> function($model){
return $model->status!=1;
},
]
],
En yii2, utilisez return Url::to(['controler/action']);
tout à fait
[
'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']);
}
}
],
J'utilise l'extension kartik mais fonctionne bien avec yii
vous devez ajouter le modèle propiety ('template' => '{update} {delete}') à la colonne où vous mettez les options
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'otherfield'
['class' => 'yii\grid\ActionColumn','template'=>'{update} {delete}'],
C’est ce que j’ai fait https://github.com/Mihai-P/yii2theme-brain/blob/master/widgets/ActionColumn.php en bref, j’ai étendu la classe ActionColumn et utilisé le mien au lieu du default one . ma classe contient plus d'éléments, tels que la vérification des privilèges d'accès et l'affichage des boutons auxquels ils ont accès, vous pouvez ignorer cette partie et utiliser simplement le moyen de vérifier le moyen de vérifier le modèle. Je considère cela plus réutilisable que l'écriture de code dans la vue. Si vous commencez à écrire du code dans la vue, vous devez écrire le même code encore et encore pour chaque écran.
Je suis sûr que vous pouvez également faire ce que vous voulez dans la vue, essayez d'utiliser
'template' => function ($model) {
.............
}
Et retournez '{view} {delete}' ou '{delete}'
Cela fonctionne pour moi:
'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',
]) : '';
},
est identique à: return $ model-> status == ''? 'show_action_here': 'no_show';
celui-ci a fonctionné pour moi. code ActionColumn complet
[
'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;
}
}
],
Vous devez changer une seule ligne.
Remplacer:
'template' => '{update} {delete}',
Avec:
'template' => function($model){
return ($model->status==1)?'{update} {delete}':'{view} {update} {delete}';
},