隐藏 Yii2 GridView 操作按钮

Posted

技术标签:

【中文标题】隐藏 Yii2 GridView 操作按钮【英文标题】:Hide Yii2 GridView Action buttons 【发布时间】:2015-01-24 08:54:18 【问题描述】:

我想在模型字段状态的基础上隐藏 Yii2 GridView Action Column 按钮。 如果状态为 = 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;
        

       ],

【问题讨论】:

github.com/yiisoft/yii2/blob/… 只需添加return $model-&gt;status == 1 ? Html::a('&lt;span class="fa fa-search"&gt;&lt;/span&gt;View', $url, [ 'title' =&gt; Yii::t('app', 'View'), 'class'=&gt;'btn btn-primary btn-xs', ]) : ''; 你的代码对我有用,谢谢 你能把你的评论改成下面的答案吗? 【参考方案1】:

这就是我所做的https://github.com/Mihai-P/yii2theme-brain/blob/master/widgets/ActionColumn.php 简而言之,我扩展了 ActionColumn 类并使用我自己的而不是默认的。 我的班级有更多的东西,比如检查访问权限并只显示他们可以访问的按钮,你可以忽略那部分,只使用检查模型的方法。我认为这比在视图中编写代码更可重用。如果您开始在视图中编写代码,那么您必须为每个屏幕一遍又一遍地编写相同的代码。

我相信你也可以在视图中做你想做的事情,尝试使用

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

并返回“view delete”或“delete”

【讨论】:

【参考方案2】:

Read

只需添加

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

【讨论】:

【参考方案3】:

它对我有用:

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

【讨论】:

yes...与:return $model->status == '' 相同? “是”:“否”;【参考方案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\'s lists'),
                        ]);
                    
                ],
                'urlCreator' => function ($action, $model, $key, $index) 
            if ($action === 'today_action') 
                return Url::to(['customers/today']);
            
        
            ],

我正在使用 kartik 扩展,但在 yii 上可以正常工作

【讨论】:

【参考方案5】:

你可以使用 ['class' =&gt; ActionColumn::className(),'template'=&gt;'view update' ] 在您的网格视图上。

【讨论】:

【参考方案6】:

使用来自ActionColumn 类的visibleButtons 属性:

[
    'class' => 'yii\grid\ActionColumn',
    'visibleButtons' => [
        'view' => function ($model, $key, $index) 
            return $model->status !== 1;
         
    ]
]

参考:https://www.yiiframework.com/doc/api/2.0/yii-grid-actioncolumn#$visibleButtons-detail

【讨论】:

【参考方案7】:

这个对我有用。完整的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;
                
                
],

【讨论】:

【参考方案8】:

您需要将模板属性 ('template'=>'update delete') 添加到放置选项的列中

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

【讨论】:

【参考方案9】:

你只需要改变一行。

替换:

'template' =&gt; 'update delete',

与:

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

【讨论】:

【参考方案10】:

可以这样实现

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

【讨论】:

不知道 visibleButtons 数组 - 干净整洁。谢谢。 非常感谢。在这里的所有答案中,它对我帮助最大!

以上是关于隐藏 Yii2 GridView 操作按钮的主要内容,如果未能解决你的问题,请参考以下文章

yii,gridview隐藏查看(view)按钮

Yii2 GridView Triger仅在点击时过滤

yii2的gridview批量删除

yii2模板

kartik\Select2 作为 yii2\grid 中的过滤器输入

YII2 gridview