我有2个型号:分类和新闻。每个新闻都有与tbl_category相关的类别。在我的新闻视图文件中,记录按desc与CActiveDataProvider排序。现在我想对数据DESC进行排序,但无法处理它。这是Category的视图文件。
<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')); ?>
我想我们需要来自Controller的行动:
public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id),
));
}
感谢您的帮助!
答案 0 :(得分: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错误。