1

我的视图文件中有这些代码:

    <?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'name' => 'Name',
            'type'=>'raw',
            'value' => 'CHtml::link(CHtml::encode($data->profile->first_name." ".$data->profile->last_name),array("match/view","id"=>$data->id))',
        ),
        array(
            'name' => 'Similiarity Score',
            'type'=>'raw',
            'value' => array($this, 'calculateScore'),
        ),
    ),
)); ?>

您会注意到第二列调用了控制器文件中的函数 calculateScore($data, $row)。无论如何我可以根据这些分数对表格进行排序吗?

4

1 回答 1

1

我假设您的结果来自数据库,并且您使用CActiveDataProvideror CSqlDataProvider。在这种情况下,您将不得不以calculateScore某种方式将 for 的逻辑移动到数据库查询中。您可以将公共属性添加score到模型类并将其添加到您的select属性中CDbCriteria

$criteria->select = array('*', '... SQL FOR SCORE CALC HERE ... AS score');

然后你就可以score在你的sort定义中进行排序CActiveDataProvider

'sort' => array(
    'attributes' => array(
        // ...
        'score',
于 2013-06-02T11:07:29.243 回答