yii2 show/display gridview 中的各种按钮
yii2 show/display various buttons in gridview
我对 Yii2 有疑问(和往常一样)。我试图在 GridView 的一个单元格中显示许多按钮。我有一张票有四种可能的状态:
- 1:打开
- 2:处理中
- 3:关闭
- 4:编辑
在一列(ActionColumn?)中,我想显示许多按钮来改变它的状态,如下所示:
- 如果状态为“1”,我想显示两个按钮:'In process' 和 'Close Ticket'。
- 如果状态为 2,我只想显示 'Close Ticket' 按钮 -> 没关系
- 如果关闭(状态 = 3),我想显示 'Edit Ticket' 按钮 -> 没关系
- 如果状态为 4,我将显示 'Close Ticket' 按钮 -> 没关系
这是我的 GridView 中该列的代码。我只能显示一个按钮,不知道如何显示更多按钮,因为你不能 return 多个元素或一个数组:
[
'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']);
}
},
],
谢谢大家的帮助!
如果您想使用 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 的更多信息。
我对 Yii2 有疑问(和往常一样)。我试图在 GridView 的一个单元格中显示许多按钮。我有一张票有四种可能的状态:
- 1:打开
- 2:处理中
- 3:关闭
- 4:编辑
在一列(ActionColumn?)中,我想显示许多按钮来改变它的状态,如下所示:
- 如果状态为“1”,我想显示两个按钮:'In process' 和 'Close Ticket'。
- 如果状态为 2,我只想显示 'Close Ticket' 按钮 -> 没关系
- 如果关闭(状态 = 3),我想显示 'Edit Ticket' 按钮 -> 没关系
- 如果状态为 4,我将显示 'Close Ticket' 按钮 -> 没关系
这是我的 GridView 中该列的代码。我只能显示一个按钮,不知道如何显示更多按钮,因为你不能 return 多个元素或一个数组:
[
'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']);
}
},
],
谢谢大家的帮助!
如果您想使用 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 的更多信息。