假设我的网格视图中有一列is_delivered,其中包含值的数组,例如
(1,1,0),(1,1,1),(0,0,0)总共是三种组合。我已将单元格的ID设置为“已发送”
现在我如何根据列中的值更改行的颜色,例如红色,蓝色或黄色。
例如,如果它是(1,1,1),那么行颜色将是绿色,如果(1,1,0)则行颜色将为黄色,否则为红色。
我无法说明在哪里以及如何开始。我不能在这里使用==因为它可以包含3个以上的值。需要使用像contains这样的运算符。
我正在尝试使用像
这样的简单代码<?php
$script = <<<EOD
alert ($('#delivered').val());
EOD;
$this->registerJs($script);
?>
但它给了我一个没有任何价值的空白警报。
感谢您的任何建议。
更新问题以获取列is_delivered
的值[
'attribute'=>'is_delivered',
'value' => function ($data) {
$str = '';
foreach($data->medicineRequests as $request) {
$str .= $request->is_delivered.',';
}
return $str;
},
],
所以列is_delivered是一对多,并从另一个模型拉出。
答案 0 :(得分:4)
您可以简单地执行以下操作:
'attribute'=>'is_delivered',
'format'=>'raw',
'value'=>function($row){
$values=[
'(1,1,0)'=>'red',
'(1,1,1)'=>'green',
'(1,0,1)'=>'blue',
//other values with its color
];
return Html::tag('span', $row->is_delivered, ['style'=>'background-color:'.$values[$row->is_delivered]]);
}
通过上面的代码,我们保存了所有可能的值,并为每个值分配颜色。然后,我们在span
标记中显示值,背景颜色指定为$values
数组。另外,如您所见,无需使用java-script
或任何==
或if
语句。
您可以改善以下代码:
['style'=>'background-color:'.isset($values[$row->is_delivered]) ? $values[$row->is_delivered] : 'white']
因此,如果$values
数组中不存在该值,则会以white
背景显示该值。请注意,我设置了background-color
,您必须将其更改为color
。