0

カテゴリとニュースの 2 つのモデルを取得しました。各ニュースには、tbl_category に関連付けられたカテゴリがあります。私のニュースビュー ファイルでは、CActiveDataProvider を使用してレコードを降順で並べ替えています。今、データDESCをソートしたいのですが、それを処理できません。ここにカテゴリーのビューファイルがあります。

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

私は、カテゴリのrenderPartialビューです。1 (ホスト/カテゴリ/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これにより、データベースで行われた for each 呼び出しにパラメータが追加CDbCriteriaされるため、モデルは常に でソートされcreate_time DESCます。

このgetTableAlias()メソッドを使用すると、常に正しいテーブル エイリアスを使用して、SQL エラーを防ぐことができます。

于 2013-01-14T13:27:24.553 に答える