【问题标题】:yii2 show/display various buttons in gridviewyii2在gridview中显示/显示各种按钮
【发布时间】:2020-04-30 15:14:17
【问题描述】:

我对 Yii2 有疑问(和往常一样)。我试图在 GridView 的单元格中显示许多按钮。我有一张票,有四种可能的状态:

  • 1:打开
  • 2:处理中
  • 3:关闭
  • 4:编辑

在一列(ActionColumn?)中,我想显示许多按钮来改变它的状态,如下所示:

  • 如果状态为“1”,我想显示两个按钮:“处理中”和“关闭工单”。
  • 如果状态为 2,我只想显示“关闭工单”按钮 -> 没关系
  • 如果它已关闭(状态 = 3),我想显示“编辑票证”按钮 -> 没关系
  • 如果状态为 4,我将显示“关闭工单”按钮 -> 没关系

这是我的 GridView 中该列的代码。我只能显示一个按钮,不知道如何显示更多按钮,因为您不能返回多个元素或数组:

[
               'label' => 'Change State:',
               'format' => 'raw',
               'value' => function($dataProvider){
                            if($dataProvider->state== '1'){
                               return Html::a('In Process', ['/tickets/inprocessticket', 'id' => $dataProvider->id], ['class'=>'btn btn-warning', 'id' => 'btn_inProcessTicket']);
                            }else if($dataProvider->state== '2'){
                               return Html::a('Close Ticket', ['/tickets/closeticket', 'id' => $dataProvider->id], ['class'=>'btn btn-danger', 'id' => 'btn_closeTicket']);
                            }else if($dataProvider->state== '3'){
                               return Html::a('Edit Ticket', ['/tickets/editticket', 'id' => $dataProvider->id], ['class'=>'btn btn-info', 'id' => 'btn_editTicket']);
                            }else if($dataProvider->state== '4'){
                               return Html::a('Close Ticket', ['/tickets/closeticket', 'id' => $dataProvider->id], ['class'=>'btn btn-danger', 'id' => 'btn_closeTicket']);
                            }
                          },
           ],

感谢大家的帮助!

【问题讨论】:

    标签: button gridview yii2 cell


    【解决方案1】:

    如果您想使用yii\grid\ActionColumn,您应该在$buttons 属性中定义按钮,并使用$visibleButtons 回调来确定应该显示哪些按钮。您可以使用$template 属性来设置它们的顺序。

    [
        'class' => \yii\grid\ActionColumn::class,
        'template' => '{process} {edit} {close}' //here will be all posible buttons
        'buttons' => [
            'process' => function($url, $model, $key) {
                return Html::a(
                    'In Process',
                    [
                        '/tickets/inprocessticket',
                        'id' => $model->id
                    ],
                    [
                        'class'=>'btn btn-warning',
                        'id' => 'btn_inProcessTicket'
                    ]
                );
            },
            'edit' => function($url, $model, $key) {
                return Html::a(
                    'Edit Ticket',
                    [
                        '/tickets/editticket',
                        'id' => $dataProvider->id
                    ], 
                    [
                        'class'=>'btn btn-info',
                        'id' => 'btn_editTicket'
                    ]
                );
            },
            'close' => function ($url, $model, $key) {
                return Html::a(
                    'Close Ticket',
                    [
                        '/tickets/closeticket',
                        'id' => $dataProvider->id
                    ],
                    [
                        'class'=>'btn btn-danger',
                        'id' => 'btn_closeTicket'
                    ]
                );
            },
        ],
        'visibleButtons' => [
            'process' => function($model, $key, $index) {
                  //the in process button should only be shown if state == 1
                  return $model->state == 1;
            },
            'edit' => function($model, $key, $index) {
                  //the edit button should only be shown if state == 3
                  return $model->state == 3;
            },
            'close' => function($model, $key, $index) {
                  //the close button should be shown in each state except of state == 3
                  return $model->state != 3;
            },
        ],
    ]
    

    您可以找到有关ActionColumn 的更多信息,以及它的回调in documentation

    【讨论】:

    • 非常感谢!还注意到'以我的做事方式'这也可以工作 -----> return 'Close Ticket编辑票证';但是您的解决方案是应该使用的解决方案。 Yii 文档非常完整,但有时我会错过一些特定的示例……谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2021-08-01
    • 2020-11-08
    相关资源
    最近更新 更多