yii2 показать / отобразить различные кнопки в виде сетки - PullRequest
0 голосов
/ 30 апреля 2020

У меня проблема с 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']);
                            }
                          },
           ],

Спасибо всем за вашу помощь!

1 Ответ

1 голос
/ 30 апреля 2020

Если вы хотите использовать 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 и ее обратных вызовах можно найти в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...