Yii2 ActionColumn 复制图标
Yii2 ActionColumn Duplicating Icons
我正在使用 Yii2 Grid ActionColumn。我的数据库中有一个名为 log_type
的字段,其值为 Risk Assessment
或 Documentation
我想做的是仅在 log_type
为 Risk Assessment
它非常适合我的 PDF
图标。但是对于我的 Yes
和 No
图标。它仅在设置为显示 Risk Assessment
时复制它们如果我将其设置为显示 Documentation
它只会显示 1 个复选标记而不是 2 个。查看代码和屏幕截图:
<?php
$gridColumns = [
[
'class'=>'kartik\grid\ActionColumn',
'header'=>'Action',
'hAlign'=> GridView::ALIGN_CENTER,
'vAlign'=>GridView::ALIGN_MIDDLE,
'template'=>'{update}{view}{yes}{no}{pdf}',
'buttons'=>[
'pdf'=>function($url, $model){
if($model->log_type == "Risk Assessment"){
return Html::a('<i class = "fa fa-file-pdf-o"></i>',
'pdf?id='.$model->id,[
'data-pjax'=>'0',
'target'=>'blank',
]);
}
},
'yes'=>function($url,$model){
return Html::a('<i class = "fa fa-check"</li>');
}
],
'visibleButtons'=>[
'yes'=>function($model,$key,$index){
if($model->log_type === 'Risk Assessment'){
return false; // Right here. If I change this to True I get the duplicate icons as shown in the screenshot.
}else{
return true;
}
}
],
'urlCreator'=>function($action, $model, $key, $index){
if($action === 'view' && $model->log_type === 'Risk Assessment'){
$url = 'view-risk?id='.$model->id;
return $url;
}else if ($action === 'view' && $model->log_type === 'Documentation'){
$url = 'view?id='.$model->id;
return $url;
}
if($action === 'update' && $model->log_type === 'Risk Assessment'){
$url = 'update-risk?id='.$model->id;
return $url;
}else if($action === 'update' && $model->log_type === 'Documentation'){
$url = 'update?id='.$model->id;
return $url;
}
}
],
[
'attribute'=>'id',
'header' => 'ID',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>false,
],
[
'attribute'=>'description',
'header' => 'Description',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'log_type',
'header' => 'Log Type',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'development_type',
'header' => 'Development Type',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'platform_type',
'header' => 'Platform Type',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'security_risk',
'header' => 'Secuirty Risk',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'comments',
'header' => 'Comments',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'risk_accepted',
'header' => 'Risk Accepted',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'approved',
'header' => 'Approved',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
]
?>
重复图标
非重复图标
我试过重现你的问题,但我做不到,但我认为它与这个格式错误的标签有关:
'<i class = "fa fa-check"</li>'
您打开了一个 <i>
标签,但关闭了 <li>
。当我使用您的代码时,即使更新了您对重复图标的评论所在的行,我也没有显示任何图标。
您有条件地显示 buttons
上的按钮并同时使用 visibleButtons
属性这一事实也可能存在问题。我认为最好使用一个 或 另一个,即对内置 view
、update
、[=19= 使用 vibilbeButtons
] 按钮,并在可能的情况下,在 buttons
属性上添加您自己的条件逻辑。 Yii2指南上的例子都是这样做的。
你可以将手动生成的标签更新为使用Kartik icon class生成图标,并将所有逻辑移动到buttons
中,将它们都放在同一个地方会更容易维护,它将按预期工作:
'template' => '{update}{view}{yes}{no}{pdf}',
'buttons' => [
'pdf' => function($url, $model) {
return $model->log_type == "Risk Assessment"
? Html::a(Icon::show('file-pdf'),
['pdf/view', 'id' => $model->id] , [
'data-pjax'=>'0',
'target'=>'blank',
]) : '';
},
'yes' => function($url,$model) {
return $model->log_type === 'Risk Assessment'
? Html::a(Icon::show('check'), ['controller/action', 'id' => $model->id]) : '';
},
...
],
'visibleButtons'=>[],
...
我正在使用 Yii2 Grid ActionColumn。我的数据库中有一个名为 log_type
的字段,其值为 Risk Assessment
或 Documentation
我想做的是仅在 log_type
为 Risk Assessment
它非常适合我的 PDF
图标。但是对于我的 Yes
和 No
图标。它仅在设置为显示 Risk Assessment
时复制它们如果我将其设置为显示 Documentation
它只会显示 1 个复选标记而不是 2 个。查看代码和屏幕截图:
<?php
$gridColumns = [
[
'class'=>'kartik\grid\ActionColumn',
'header'=>'Action',
'hAlign'=> GridView::ALIGN_CENTER,
'vAlign'=>GridView::ALIGN_MIDDLE,
'template'=>'{update}{view}{yes}{no}{pdf}',
'buttons'=>[
'pdf'=>function($url, $model){
if($model->log_type == "Risk Assessment"){
return Html::a('<i class = "fa fa-file-pdf-o"></i>',
'pdf?id='.$model->id,[
'data-pjax'=>'0',
'target'=>'blank',
]);
}
},
'yes'=>function($url,$model){
return Html::a('<i class = "fa fa-check"</li>');
}
],
'visibleButtons'=>[
'yes'=>function($model,$key,$index){
if($model->log_type === 'Risk Assessment'){
return false; // Right here. If I change this to True I get the duplicate icons as shown in the screenshot.
}else{
return true;
}
}
],
'urlCreator'=>function($action, $model, $key, $index){
if($action === 'view' && $model->log_type === 'Risk Assessment'){
$url = 'view-risk?id='.$model->id;
return $url;
}else if ($action === 'view' && $model->log_type === 'Documentation'){
$url = 'view?id='.$model->id;
return $url;
}
if($action === 'update' && $model->log_type === 'Risk Assessment'){
$url = 'update-risk?id='.$model->id;
return $url;
}else if($action === 'update' && $model->log_type === 'Documentation'){
$url = 'update?id='.$model->id;
return $url;
}
}
],
[
'attribute'=>'id',
'header' => 'ID',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>false,
],
[
'attribute'=>'description',
'header' => 'Description',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'log_type',
'header' => 'Log Type',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'development_type',
'header' => 'Development Type',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'platform_type',
'header' => 'Platform Type',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'security_risk',
'header' => 'Secuirty Risk',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'comments',
'header' => 'Comments',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'risk_accepted',
'header' => 'Risk Accepted',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
[
'attribute'=>'approved',
'header' => 'Approved',
'hAlign' => GridView::ALIGN_CENTER,
'vAlign' => GridView::ALIGN_MIDDLE,
'filter'=>true,
],
]
?>
重复图标
非重复图标
我试过重现你的问题,但我做不到,但我认为它与这个格式错误的标签有关:
'<i class = "fa fa-check"</li>'
您打开了一个 <i>
标签,但关闭了 <li>
。当我使用您的代码时,即使更新了您对重复图标的评论所在的行,我也没有显示任何图标。
您有条件地显示 buttons
上的按钮并同时使用 visibleButtons
属性这一事实也可能存在问题。我认为最好使用一个 或 另一个,即对内置 view
、update
、[=19= 使用 vibilbeButtons
] 按钮,并在可能的情况下,在 buttons
属性上添加您自己的条件逻辑。 Yii2指南上的例子都是这样做的。
你可以将手动生成的标签更新为使用Kartik icon class生成图标,并将所有逻辑移动到buttons
中,将它们都放在同一个地方会更容易维护,它将按预期工作:
'template' => '{update}{view}{yes}{no}{pdf}',
'buttons' => [
'pdf' => function($url, $model) {
return $model->log_type == "Risk Assessment"
? Html::a(Icon::show('file-pdf'),
['pdf/view', 'id' => $model->id] , [
'data-pjax'=>'0',
'target'=>'blank',
]) : '';
},
'yes' => function($url,$model) {
return $model->log_type === 'Risk Assessment'
? Html::a(Icon::show('check'), ['controller/action', 'id' => $model->id]) : '';
},
...
],
'visibleButtons'=>[],
...