【问题标题】:Yii: Change default order in CGridViewYii:更改 CGridView 中的默认顺序
【发布时间】:2013-09-16 07:16:26
【问题描述】:

我已经为模型 Faq

生成了 giix crud

控制器:

public function actionAdmin() {
    $model = new Faq('search');
    $model->unsetAttributes();

    if (isset($_GET['Faq']))
        $model->setAttributes($_GET['Faq']);

    $this->render('admin', array(
        'model' => $model,
    ));
}

查看 - 管理员:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'faq-grid',
    'dataProvider' => $model->search(array('order'=>'order ASC')),
    'filter' => $model,
    'columns' => array(
        'order',
        'question',
        'answer',
        array(
            'class' => 'CButtonColumn',
        ),
    ),
)); ?>

我想按字段“订单”订购商品,所以我添加 array('order'=&gt;'order ASC')$model-&gt;search(); 但这并没有改变任何东西。哪里出错了?

【问题讨论】:

    标签: yii frameworks cgridview


    【解决方案1】:

    更新模型中的 search() 函数并添加以下代码

    'criteria'=>$criteria,
    //add here
    
    'sort'=>array(
        'defaultOrder'=>'order ASC',
    ),
    

    在管理视图中将 dataprovider 更改为此

    'dataProvider' => $model->search(),
    

    【讨论】:

      【解决方案2】:

      获取 CActiveDataProvider

      $dataProvider = $model->search();
      

      并编辑属性“排序”

      $dataProvider->sort = array(
        'defaultOrder'=>'order ASC'
      );
      

      【讨论】:

        【解决方案3】:

        在 'search($order)' 方法中你可以输入:

        $criteria=new CDbCriteria;
        $criteria->order = $order; // $order = 'order ASC' in your example.
        
        return new CActiveDataProvider(YourModel::model(), array(
                    'criteria'=>$criteria,
                ));
        

        【讨论】:

          【解决方案4】:
          public function search()
          {
              $criteria = new CDbCriteria;
          
              // build your criteria here
          
              // $criteria->order = 'something'; would be needed if you did `find?()` to return ordered array
          
              // Because CGridView|CListView uses data provider ...
              return new CActiveDataProvider( $this, array(
                  'criteria' => $criteria,
                  'sort' => array(
                      'attributes' => array(
                          '*',
                      ),
                      // ... so you need to set the default order for order to work
                      'defaultOrder' => array(
                          'order' => CSort::SORT_ASC,
                      ),
                  ),
              ));
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多