4

我是一名学生,正在从事我的实际项目。它是一个网络应用程序,它跟踪谷歌关键词的排名并将它们显示为一个表格。现在我想把每一行都涂成绿色,如果当前排名比以前好,红色如果排名下降等等。我如何在 Yii 中用 CGridView 实现这个?目前我有以下解决方案。在 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”类。我找不到我的错误:-(如果有人可以帮助我并指出正确的方向,我将不胜感激。

4

1 回答 1

5

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

另请注意,rowCssClassExpression是一个 PHP 表达式,因此您的方法的结果可能应该用引号引起来:

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

不幸的是,这也不起作用,因为模型的实例$data是在内部定义的rowCssClassExpression(并针对网格的每一行进行评估),而不是在您的视图的上下文中。

作为解决方案,您可以将其创建getCssClass为模型的方法。然后你的表达式将如下所示:

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

要为每个特定单元格指定 CSS 类,您还可以查看类的cssClassExpressionCGridColumn

于 2012-11-01T19:31:23.243 回答