基于函数调用值在Yii中使用CGridView对列进行排序

时间:2013-06-02 03:05:11

标签: php yii cgridview

我的视图文件中包含以下代码:

    <?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)。无论如何我可以根据这些分数对表格进行排序吗?

1 个答案:

答案 0 :(得分:1)

我认为您的结果来自数据库,而您使用CActiveDataProviderCSqlDataProvider。在这种情况下,您必须以某种方式将calculateScore的逻辑移动到数据库查询中。您可以向模型类添加公共属性score,并将其添加到select的{​​{1}}属性中:

CDbCriteria

然后,您可以按$criteria->select = array('*', '... SQL FOR SCORE CALC HERE ... AS score'); 的{​​{1}}定义score排序:

sort