Yii:如何动态改变CDataColumn的htmlOptions属性

CGridView的CDataColumn可以设置htmlOptions属性,比如添加css样式:

        array(
                'name'=>'Title',
                'type'=>'raw',
                'value'=>'$data->Title',
                'htmlOptions'=>array('class'=>'alignLeft'),
        ),

但是如果想根据$data记录的不同情况,来设置不同的css属性,CDataColumn就不支持了。

解决方法是编写CDataColumn派生类,重写renderDataCell函数,在里面添加对表达式的支持。

        public function renderDataCell($row)
        {
                $data=$this->grid->dataProvider->data[$row];
                if($this->evaluateHtmlOptions) {
                    foreach($this->htmlOptions as $key=>$value) {
                        $options[$key] = $this->evaluateExpression($value,array('row'=>$row,'data'=>$data));
                    }
                }
                else $options=$this->htmlOptions;
                if($this->cssClassExpression!==null)
                {
                        $class=$this->evaluateExpression($this->cssClassExpression,array('row'=>$row,'data'=>$data));
                        if(isset($options['class']))
                                $options['class'].=' '.$class;
                        else
                                $options['class']=$class;
                }
                echo CHtml::openTag('td',$options);
                $this->renderDataCellContent($row,$data);
                echo '</td>';
        }

然后在CGridView中,使用类似下面的方式进行调用:

        array(
            'class'=>'Your Derived Class Name',
            'header'=>Yii::t('Cms','Title'),
            'name'=>'Title',
            'value'=>'$data->Title',
            'evaluateHtmlOptions'=>true,
            'htmlOptions'=>array('style'=>'"{$data->getHtmlOptions()}"'),
        ),   


by iefreer

你可能感兴趣的:(yii,CGridView,CDataColumn,htmlOptions)