Сортировка CListView в yii - PullRequest
       11

Сортировка CListView в yii

9 голосов
/ 31 марта 2011

Пожалуйста, примите во внимание это:

class User extends CActiveRecord
{
    ...
    public function relations()
    {
        return array(
            ...    
            'articleCount' => array(self::STAT, 'Article', 'userid'),
            ...    
            );
    }
    ...
}

Теперь мне нужно создать $dataProvider = new CActiveDataProvider(...) для подачи виджета CListView, к которому я хочу добавить articleCount к свойству sortableAttributes, чтобы я мог сортировать записи пользователя по количеству статей, которые пользователь автор для.

Какие методы наиболее удобны? Какие есть другие альтернативы?

1 Ответ

21 голосов
/ 11 апреля 2011

Ну, это заняло у меня некоторое время, но я наконец понял это..что-то вроде этого:

public function search() {
  $criteria=new CDbCriteria;
  $criteria->select = 't.*, IFNULL( count(article.id), 0) as articleCount';
  $criteria->join = 'LEFT JOIN article ON article.userid = t.id';
  $criteria->group = 't.id';
  // other $criteria->compare conditions

  $sort = new CSort();
  $sort->attributes = array(
    'articleCount'=>array(
      'asc'=>'articleCountASC',
      'desc'=>'articleCountDESC',
    ),
    '*', // add all of the other columns as sortable
  );

  return new CActiveDataProvider(get_class($this), array(
    'criteria'=>$criteria,
    'sort'=>$sort,
    'pagination'=> array(
      'pageSize'=>20,
    ),
  ));
}

Затем в вашем представлении, где вы выводите CGridView, сделайте это так:

<?php $this->widget('zii.widgets.grid.CGridView', array(
  'dataProvider'=>$model->search(),
  'columns'=>array(
    'articleCount',
    // other columns here
  )
)); ?>

Это работает, я проверял это (хотя я не использовалточно такие же имена, как 'article', но основная идея должна работать :) Я добавил некоторые бонусные функции, чтобы они работали лучше (например, волшебство IFNULL), но большая часть заслуг принадлежит этому сообщению на форуме Yii:
http://www.yiiframework.com/forum/index.php?/topic/7061-csort-and-selfstat-to-sort-by-count/

Надеюсь, это поможет!Они должны добавить лучшую поддержку для этого, так что вам не нужно делать эти сложные инструкции SELECT.Похоже, что-то, что должно «просто работать», я бы подал запрос на «улучшение» в Yii bug tracker .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...