Добавление выражения в htmlOptions CGridView

Я пытаюсь установить htmlOptions, используя значение из массива, используемого в качестве DataProvider компонента CGridView (это CArrayDataProvider). В нем есть флаг, который будет либо 0, либо 1 (0 для font-weight: normal и 1 для жирного)

'htmlOptions'=>array('style'=>'$data["flag"] == 1 ? font-weight: bold; : font-weight: normal;'),

Это не сработало, поэтому я попытался установить стиль непосредственно в DataProvider (возвращая вес шрифта: полужирный; или вес шрифта: нормальный;):

'htmlOptions'=>array('style'=>'$data["style"]'),

Но вывод:

<td style="$data["style]">Value</td>

Что я делаю не так?


person Elathan    schedule 08.05.2012    source источник


Ответы (3)


Вы не можете использовать $data или $row в htmlOptions. Вы должны расширить CDataColumn.

Обратитесь к эту статью, чтобы узнать, как это сделать.

person dInGd0nG    schedule 08.05.2012
comment
Это мне очень помогло, но что, если я хочу установить какой-то фиксированный стиль плюс динамический. Я попытался объединить некоторую строку, но это не сработало. - person Elathan; 08.05.2012

Yii v1.1.13 теперь имеет эту функциональность, встроенную в CGridView: http://www.yiiframework.com/doc/api/1.1/CGridView#rowHtmlOptionsExpression-detail

Вы можете использовать $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 находится в строке. Это странно, но это так работает!

person tslater    schedule 02.04.2013
comment
очень полезный и простой в использовании - person Developerium; 24.11.2013

htmlOptions не имеет доступа к $data. Итак, вы можете попробовать это

'value' => '($data["flag"] == 1 ? "<b>$data->your_value</b> ":"$data->your_value")',
person Olejon    schedule 02.02.2015