gridview - 将动态 css 类添加到 CGridView 中的每个行/单元格

标签 gridview yii

我是一名学生,正在从事我的实际项目。它是一个网络应用程序,可跟踪关键字的谷歌排名并将其显示为表格。现在我想将每一行着色为绿色,如果当前排名比以前更好,如果排名下降则为红色等等。我如何在 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;
}

在 View 中,我在“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'=>'-',
)); ?>

这是我的 table :

当前关键字 上一个

关键字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) . '"',

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

作为解决方案,您可以创建 getCssClass 作为模型的方法。那么你的表情将如下所示:

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

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

关于gridview - 将动态 css 类添加到 CGridView 中的每个行/单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13183831/

相关文章:

c# - 根据该行中字段的值隐藏 gridview 中的行

gridview - yii2 - 在模态窗口内使用 pjax 和 gridview

android - GridView 按钮

php - Yii:需要一个 .php 文件

php - 使用 Yii 框架时标题和元标记的顺序

php - 在 PHP 中执行的 MySQL 查询导致非常大的 httpd 线程

ASP.NET 2.0 嵌套数据网格?

html - 在 gridview 中强制行高

php - Laravel 框架对于中型项目是否足够稳定,还是我应该坚持使用更稳定的 Yii?

jquery - Yii - jQuery 在 renderPartial 之后不工作