Подтвердить что ты не робот

Скрыть кнопки управления Yii2 GridView

Я хочу скрыть кнопки 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;
        }

       ],
4b9b3361

Ответ 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', 
      ]) 
    : '';

Ответ 2

Вы можете использовать   ['class' => ActionColumn::className(),'template'=>'{view} {update}' ] на вашем экране сетки.

Ответ 3

Использовать свойство 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

Ответ 4

В 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

Ответ 5

вам нужно добавить шаблон spiety ('template' = > '{update} {delete}') в столбец arry, где вы помещаете опции

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

Ответ 6

Это то, что я сделал https://github.com/Mihai-P/yii2theme-brain/blob/master/widgets/ActionColumn.php. Я расширил класс ActionColumn и использовал свой собственный, а не стандартный. у моего класса есть больше вещей, таких как проверка прав доступа и отображение только тех кнопок, к которым у них есть доступ, вы можете игнорировать эту часть и просто использовать способ проверки способа проверки модели. Я считаю это более многоразовым, чем писать код в представлении. Если вы начнете писать код в представлении, вам придется писать один и тот же код снова и снова для каждого экрана.

Я уверен, что вы также можете делать то, что хотите внутри представления, попробуйте использовать

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

И верните либо '{view} {delete}', либо '{delete}'

Ответ 7

Его работы для меня:

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

Ответ 8

этот работал у меня. полный код 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;
                }
                }
],

Ответ 9

Вам нужно изменить только одну строку.

Заменить:

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

Ответ 10

Это можно сделать так:

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