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

本文介绍如何通过扩展CDataColumn类实现CGridView中单元格CSS样式的动态设置,以适应不同$data记录的情况。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值