Я использую 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, …
У кого-нибудь есть идея для меня?
Я думаю, вам нужно отправить строчную строку date / datetime в ваш CArrayDataProvider из вашего источника данных, а затем отформатировать его с помощью CGridView:
array( 'name'=>'datum', 'header'=>'datum', 'value'=>'$data["datum"]', 'type'=>'date', ),
Похоже, ваша проблема в том, что Yii считает, что ваша дата – это строка (вместо даты). Если вы перейдете на предоставление DataProvider даты, сортировка может работать сама.
Спасибо, что указал мне в правильном направлении. Фактически, столбец «datum» в моем примере представляет собой строку, потому что я должен использовать виртуальные атрибуты для правильного форматирования дат на немецком языке по всему моему приложению. Теперь я использую исходный столбец даты из базы данных и отформатирую его в представлении следующим образом:
array( 'name'=>'datecolumn', 'header'=>'Eingangsdatum', 'value'=>'Yii::app()->dateFormatter->formatDateTime(strtotime($data["datecolumn"]), "medium", null)', ),
=> voila, немецкий дисплей, правильно способный сортировать.