Добавление выражения в htmlOptions CGridView
Я пытаюсь установить htmlOptions, используя значение из массива, используемого в качестве DataProvider компонента CGridView (это CArrayDataProvider). В нем есть флаг, который будет либо 0, либо 1 (0 для font-weight: normal и 1 для bold)
'htmlOptions'=>array('style'=>'$data["flag"] == 1 ? font-weight: bold; : font-weight: normal;'),
Это не сработало, поэтому я попытался установить стиль непосредственно в DataProvider (возвращая font-weight: bold; или font-weight: normal;):
'htmlOptions'=>array('style'=>'$data["style"]'),
Но вывод:
<td style="$data["style]">Value</td>
Что я делаю неправильно?
3 ответа
Вы не можете использовать $data
или $ строка в htmlOptions
, Вы должны продлить CDataColumn
,
Обратитесь к этой статье за информацией о том, как это сделать.
Yii v1.1.13 теперь имеет эту функциональность, встроенную в CGridView: http://www.yiiframework.com/doc/api/1.1/CGridView
Вы можете использовать $data для модели и $row для номера строки, чтобы оценить массив htmlOptions из строки. Поскольку синтаксис немного странный, я покажу пример:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'columns' => array(
'columns' => array(
array(
'name'=>'Column Name 1',
"value"=>'$data->colVal',
),
'name'=>'Column Name 2',
"value"=>'$data->colExpression()',
),
"modelAttributeUsingNameLabel",
),
"rowHtmlOptionsExpression"=>'array(
"onclick"=>
"window.location = \'.$this->url.\'"
)')
);
Обратите внимание, что массив php для htmlOptions находится в строке. Это странно, но так оно и есть!
htmlOptions не имеет доступа к $data. Так что вы можете попробовать это
'value' => '($data["flag"] == 1 ? "<b>$data->your_value</b> ":"$data->your_value")',