0

我有 2 个模型:类别和新闻。每个新闻在 tbl_category 中都有相关的类别。在我的新闻视图文件中,记录按 desc 和 CActiveDataProvider 排序。现在我想对数据 DESC 进行排序,但无法处理。这是类别的视图文件。

<div id="newsy">
<?php $this->renderPartial('_news',array('news'=>$model->news));?>  /calling _news view
</div>

我是类别中的 renderPartial 视图,例如。1 (host/category/1),它给出了所有与 id=1 相关的新闻,但它不是按 create_time desc 排序的。有没有办法显示没有 DataProvider 排序的数据?下面是来自 /views/category 文件夹的 _news.php 视图。我应该在哪里更改排序?

<?php foreach($news as $news): ?>
<div class="c"><img src="../images/news/news<?php echo CHtml::encode($news>id); ?><?php echo CHtml::encode($news->image);?>" /></div>
<h2 class="n"><?php echo CHtml::link(CHtml::encode($news->name),array('news/view','id'=>$news->id)); ?></h2>
<?php echo CHtml::encode($news->shortDescription); ?>
<?php echo CHtml::link("Comments: ({$news->commentCount})",$news->url.'#comments', array ('class' => 'acom')); ?>

我想我们需要控制器采取行动:

public function actionView($id)
{
    $this->render('view',array(
        'model'=>$this->loadModel($id),
    ));
}

感谢帮助!

4

1 回答 1

1

如果您总是想按某个字段对模型进行排序,您可以为该模型添加一个默认范围,并在该范围中包含一个“订单”参数。

例如,如果您想始终按您的news模型排序,create_time您可以执行以下操作;

class News extends CActiveRecord
{
    ...
    public function defaultScope()
    {
        $alias = $this->getTableAlias(false,false);
        return array(
            'order'=>"`$alias`.`create_time` DESC",
        );
    }
    ...
}

这会将order参数添加到CDbCriteria对数据库进行的每个调用,因此您的模型将始终按create_time DESC.

使用该getTableAlias()方法可确保您始终使用正确的表别名来防止出现 sql 错误。

于 2013-01-14T13:27:24.553 回答