如何为Yii gridview自定义列字段创建排序选项

时间:2014-03-18 07:49:06

标签: php gridview yii

我想对表字段的自定义列字段进行排序,它正常工作,clink列字段或关联字段无法正常工作

<?php 
$this->widget('zii.widgets.grid.CGridView', 
array(


     'dataProvider'=>$dataProviderInActive,
              'id'=>'collections-grid-inactive',
              'itemsCssClass'=>'table collections',
              'ajaxUpdate'=>true,
              'pager'=>array(
                'class'=>'CLinkPager',
                'header'=>'',
              ),
              'columns'=>array
              (
                 array(
                   'class'=>'CLinkColumn',
                   'labelExpression'=>'$data->collection_title',
                   'urlExpression'=>'Yii::app()->createUrl("",array("collection"=>$data->collection_title))',
                   'header'=>'Catalog Title'
                   ),
                 array(            // display 'author.username' using an expression
                  'name'=>'Number of Images',
                  'value'=>'',
                 ),
                 array(            // display 'author.username' using an expression
                  'name'=>'Number of images used in lightboxes',
                  'value'=>'0',
                 ),
                 array(            // display 'author.username' using an expression
                  'name'=>'Number of expired',
                  'value'=>'0',
                 ),
                 array(            // display 'create_time' using an expression
                  'name'=>'Date Created',
                  'value'=>'date("Y-m-d", $data->created_at)',
                 ),

                 array(            // display a column with "view", "update" and "delete" buttons
                  'class'=>'CButtonColumn',
                  'template'=>'{view}{edit}{delete}{expiration_report}',
                   'buttons'=>array
                   (
                       'view' => array
                       (
                           'label'=>'view',
                           'options'=>array('class'=>'btn'),
                           'imageUrl'=>'',
                           'url'=>'Yii::app()->createUrl("",array("collection"=>$data->collection_title))',
                       ),
                       'edit' => array
                       (
                           'label'=>'edit',
                           'options'=>array('class'=>'btn'),
                           'imageUrl'=>'',
                           'url'=>'Yii::app()->createUrl("", array())'
                       ),
                       'delete' => array
                       (
                           'label'=>'delete',
                           'options'=>array('class'=>'btn-danger btn'),
                           'imageUrl'=>'',
                           'url'=>'Yii::app()->createUrl("", array())'
                       ),
                       'expiration_report' => array
                       (
                           'label'=>'expiration report',
                           'options'=>array('class'=>'btn'),'imageUrl'=>'',
                           'url'=>'Yii::app()->createUrl("", array())'
                       ),
                   )
                 ),
              ),
          ));
?>

2 个答案:

答案 0 :(得分:0)

尝试在排序属性数组中添加属性:

$dataProviderInActive->sort->attributes['collection_title']=array(
                                   'asc'=>'collection_title',
                                   'desc'=>'collection_title DESC');

答案 1 :(得分:0)

您的问题没有完整的详细信息。如果这是自定义字段,则必须根据对象类型显式定义排序。例如,我为CArrayDataProvider对象执行了此操作,此处为。您需要在模型中执行此操作。同样,答案取决于对象类型。在我的示例中,$ rawData是数据库查询返回的数据。

return new CArrayDataProvider($rawData, array(
        'id'=>'id',
        'sort'=>array(
            'attributes'=>array(
                'attribute1',
                'attribute2',
            ),
        ),
        'pagination'=>array(
            'pageSize'=>50,
        ),
    ));