我在网站上使用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,...
任何人都有我的想法?
答案 0 :(得分:1)
我认为您需要从数据源向您的CArrayDataProvider发送原始日期/日期时间字符串,然后使用CGridView格式化它:
array(
'name'=>'datum',
'header'=>'datum',
'value'=>'$data["datum"]',
'type'=>'date',
),
看起来你的问题是Yii认为你的日期是一个字符串(而不是一个日期)。如果您转向为DataProvider提供日期,则排序可能会自行解决。
答案 1 :(得分:1)
感谢您指点我正确的方向。实际上,我的示例中的“datum”列是一个字符串,因为我必须使用虚拟属性在我的应用程序中正确地格式化日期。现在我使用数据库中的原始日期列,并在视图中将其格式化为:
array(
'name'=>'datecolumn',
'header'=>'Eingangsdatum',
'value'=>'Yii::app()->dateFormatter->formatDateTime(strtotime($data["datecolumn"]), "medium", null)',
),
=>瞧,德语显示,正确地能够排序。