【问题标题】:Hide Yii2 GridView Action buttons隐藏 Yii2 GridView 操作按钮
【发布时间】: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', ]) : '';
  • 你的代码对我有用,谢谢
  • 你能把你的评论改成下面的答案吗?

标签: yii2


【解决方案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 数组 - 干净整洁。谢谢。
                  • 非常感谢。在这里的所有答案中,它对我帮助最大!
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-07-27
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-12-13
                  • 2019-02-02
                  相关资源
                  最近更新 更多