在CGridView的htmlOptions中添加表达式

时间:2012-05-08 17:54:58

标签: php yii yii-components

我正在尝试使用来自用作CGridView组件的DataProvider的数组中的值来设置htmlOptions(它是CArrayDataProvider)。在其中有一个标志,它将是0或1(0表示font-weight:normal,1表示粗体)

'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 个答案:

答案 0 :(得分:4)

您无法在$data中使用htmlOptions或$行。您必须扩展CDataColumn

有关如何操作的信息,请参阅this article

答案 1 :(得分:3)

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.\'"
                  )')
 );

请注意,htmlOptions的php数组是一个字符串。这很奇怪,但它是如何运作的!

答案 2 :(得分:1)

htmlOptions无法访问$ data。 所以你可以试试这个

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