在CGridView排序日期列与CArrayDataProvider(Sorting a date

2019-10-16 22:07发布

我使用的一个网站上CGridView显示经由CArrayDataProvider提供的数据。 原因是,该数据在不同的表累积并用额外的计算列富集。 排序和筛选一般做工精细与此代码(......省略列):

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'produkt-grid',
    'dataProvider'=>new CArrayDataProvider($betroffeneProdukte, array(
            'sort' => array(
                'attributes' => array(
                    'bezeichnung',
                    'datum',
                    ...
                ),
            ),
            'pagination' => false,
        )),
    'enableSorting' => true,
        'columns'=>array(
            array(
                'name'=>'bezeichnung',
                'header'=>'Bezeichnung',
                'value'=>'$data["bezeichnung"]',
            ),
            array(
                'name'=>'datum',
                'header'=>'datum',
                'value'=>'$data["datum"]',
            ),
            ...
        ),

));

问题是日期列。 它的排序为这样的(德国格式)字符串:2012年1月10日,03.08.2012,10.01.2012,15.02.2012,...

我想这样的正确排序,这当然是:10.01.2012,15.02.2012,03.08.2012,2012年1月10日,...

任何人都得到了我的想法?

Answer 1:

我认为你需要从数据源与CGridView在原始日期/时间字符串发送给你的CArrayDataProvider,然后格式化它,而不是:

array(
    'name'=>'datum',
    'header'=>'datum',
    'value'=>'$data["datum"]',
    'type'=>'date',
),

它看起来像你的问题是,Yii的认为你的日期是一个字符串(而不是一个日期)。 如果您转移到提供DataProvider的日期,则排序可以工作本身了。



Answer 2:

谢谢你指着我在正确的方向。 其实,在我的例子中,“基准”列是一个字符串,因为我必须用虚拟属性来德国在我的应用程序中正确格式化日期。 现在,我从数据库中使用原来的日期栏,并在这样的观点格式化:

array(
  'name'=>'datecolumn',
  'header'=>'Eingangsdatum',
  'value'=>'Yii::app()->dateFormatter->formatDateTime(strtotime($data["datecolumn"]), "medium", null)',
),

=>瞧,德语显示,正确地能够进行排序。



文章来源: Sorting a date column in CGridView with CArrayDataProvider
标签: php yii