Hide Yii2 GridView Action buttons

半世苍凉 提交于 2019-12-09 04:20:33

问题


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:

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

       ],

回答1:


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



回答2:


You can use ['class' => ActionColumn::className(),'template'=>'{view} {update}' ] on your gridview.




回答3:


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




回答4:


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




回答5:


It can be done like this

[
    'class' => 'yii\grid\ActionColumn',
    'contentOptions' => [],
    'header'=>'Actions',
    'template' => '{view} {update} {delete}',
    'visibleButtons'=>[
        'view'=> function($model){
              return $model->status!=1;
         },
    ]
],



回答6:


you need to add the template propiety ('template'=>'{update} {delete}') to the column arry where you put the options

    'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'id', 
            'otherfield'
['class' => 'yii\grid\ActionColumn','template'=>'{update} {delete}'],



回答7:


This is what I have done https://github.com/Mihai-P/yii2theme-brain/blob/master/widgets/ActionColumn.php in short I have extended the ActionColumn class and use my own instead of the default one. my class has more things in it, like checking for access privileges and showing only the buttons they have access to, you can ignore that part and just use the way to check for the way to check for the model. I consider this more reusable then writing code in the view. If you start writing code in the view then you have to write the same code over and over again for each screen.

I am sure you can also do what you want inside the view, try using

'template' => function ($model) {
            .............
        }

And return either '{view} {delete}' or '{delete}'




回答8:


You need to change one line only.

Replace:

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

With:

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



回答9:


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




回答10:


this one worked for me . complete ActionColumn code

[  
                '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;
                }
                }
],


来源:https://stackoverflow.com/questions/27142206/hide-yii2-gridview-action-buttons

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!