我是一名学生,并从事我的实践项目。它是一个跟踪关键字的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的实例$data
在rowCssClassExpression
中定义了(并在网格的每一行评估),但在您的视图中不进行。
作为解决方案,您可以创建getCssClass
作为模型的方法。那么您的表情看起来像这样:
'rowCssClassExpression' => '$data->getCssClass()',
要为每个特定单元格指定CSS类,您也可以查看CGridColumn
类的CSSClasSexpression。