将动态CSS类添加到CgridView中的每个行/单元格中



我是一名学生,并从事我的实践项目。它是一个跟踪关键字的Google排名并将其显示为表格的Web应用程序。现在,我想为每个行绿色上色,如果当前排名比上一个排名更好,如果排名降低,则红色等。目前,我有以下解决方案。在ControllerClass中,我有一个函数

public function getCssClass($data)
{
    $cssClass;
    if('($data->current_pos>$data->prev_pos) || ($data->current_pos===null && $data->prev_pos!==null)')
    {
        $cssClass='rdown';
    }
    elseif('$data->current_pos<$data->prev_pos')
    {
        $cssClass='rup';
    }
    else
    {
        $cssClass='requal';
    }
    return $cssClass;
}

,在视图中,我在" Rowcssclassexpression"上称此功能为

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'keyword-grid',
'dataProvider'=>$keywordDataProvider,
'rowCssClassExpression' => $this->getCssClass($data),
'columns'=>array(
    'keyword_name',
    array(
        'name'=>'current_pos',
        'htmlOptions'=>array('style'=>'text-align: center'),
    ),
    array(
        'name'=>'prev_pos',
        'htmlOptions'=>array('style'=>'text-align: center'),
    ),
    array(
        'name'=>'top_pos',
        'htmlOptions'=>array('style'=>'text-align: center'),
    ),
    'url',
    array(
        'class'=>'CButtonColumn',
        'template'=>'{view}{delete}',
        'viewButtonUrl'=>'Yii::app()->createUrl("/keyword/view", array("id"=>$data->id))',
        'deleteButtonUrl'=>'Yii::app()->createUrl("/keyword/delete", array("id"=>$data->id))',
    ),
),
'nullDisplay'=>'-',
)); ?>

这是我的桌子:

关键字当前以前

关键字1 7 7

关键字2 8 10

关键字3 26 20

但是HTML结果是每行都会获得" RDOWN"类。我找不到我的错误:-(如果某人可以帮助我指向正确的方向,我会非常感谢。

'($data->current_pos>$data->prev_pos) || ($data->current_pos===null && $data->prev_pos!==null)'在您的方法中是一个字符串,它始终是 true。这就是为什么返回rdown的原因。为什么使用'包装条件?

另外,请注意,Rowcssclassexpression是一种PHP表达式,因此您的方法的结果可能应用引号包裹:

'rowCssClassExpression' => '"' . $this->getCssClass($data) . '"',

不幸的是,由于Model的实例$datarowCssClassExpression中定义了(并在网格的每一行评估),但在您的视图中不进行。

,这将行不通。 。

作为解决方案,您可以创建getCssClass作为模型的方法。那么您的表情看起来像这样:

'rowCssClassExpression' => '$data->getCssClass()',

要为每个特定单元格指定CSS类,您也可以查看CGridColumn类的CSSClasSexpression。

最新更新