1

我在网站上使用 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"]',
            ),
            ...
        ),

));

问题是日期列。它排序为这样的字符串(德语格式):01.10.2012, 03.08.2012, 10.01.2012, 15.02.2012, ...

我当然想像这样正确排序:10.01.2012, 15.02.2012, 03.08.2012, 01.10.2012, ...

有人对我有想法吗?

4

2 回答 2

1

感谢您为我指明正确的方向。实际上,我的示例中的“基准”列是一个字符串,因为我必须在我的应用程序中使用虚拟属性来正确格式化德语日期。现在我使用数据库中的原始日期列并在视图中对其进行格式化,如下所示:

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

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

于 2012-06-27T13:26:41.893 回答
1

我认为您需要从数据源向您的 CArrayDataProvider 发送原始日期/日期时间字符串,然后使用 CGridView 对其进行格式化:

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

看起来你的问题是 Yii 认为你的日期是一个字符串(而不是一个日期)。如果您转向为 DataProvider 提供日期,则排序可能会自行解决。

于 2012-06-26T20:24:58.283 回答