4

私は学生で、実用的なプロジェクトに取り組んでいます。キーワードの Google ランキングを追跡し、表として表示する Web アプリケーションです。現在のランキングが前のランキングよりも優れている場合はすべての行を緑に、ランキングが下がった場合は赤にします。CGridView を使用して Yii でこれを実装するにはどうすればよいですか? 現在、私は次の解決策を持っています。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 クラスを指定するには、クラスのcssClassExpressionを参照することもできますCGridColumn

于 2012-11-01T19:31:23.243 に答える