web-dev-qa-db-fra.com

Masquer les boutons d'action Yii2 GridView

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;
        }

       ],
28
Muhammad Shahzad

Lis

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', 
      ]) 
    : '';
19
Evgeniy Tkachenko

Vous pouvez utiliser ['class' => ActionColumn::className(),'template'=>'{view} {update}' ] sur votre gridview.

26
rishad2m8

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

14
Ventoh

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;
         },
    ]
],
6
user3410311

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 

6
open-ecommerce.org

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}'],
2
felipe cardenas

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}'

1
Mihai P.

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';

0
gugoan

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;
                }
                }
],
0
Shuhad zaman

Vous devez changer une seule ligne.

Remplacer:

'template' => '{update} {delete}',

Avec:

'template' => function($model){
   return ($model->status==1)?'{update} {delete}':'{view} {update} {delete}';
},

0
Ankit Singh