Допустим, у меня есть столбец в сетке-представлении is_delivered, который содержит массив значений, например
(1,1,0), (1,1,1), (0,0,0), то есть всего три комбинации. Я установил идентификатор ячейки как «доставлено»
Теперь, как я могу изменить цвет строки, например, красный, синий или желтый в зависимости от значения в столбце.
как например, если это (1,1,1), то цвет строки будет зеленым, если (1,1,0), то цвет строки будет желтым, а в остальном красным.
Я не могу понять, где и как начать. Я не могу использовать здесь ==, поскольку он может содержать более 3 значений. Нужно использовать какой-то оператор вроде содержит.
Я пытаюсь использовать простой код вроде
<?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 — один ко многим и взят из другой модели.
Вы можете просто сделать как ниже:
'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
вместо.
Других решений пока нет …