1

Webサイトで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

生の日付/日時文字列をデータソースからCArrayDataProviderに送信し、代わりにCGridViewでフォーマットする必要があると思います。

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

あなたの問題は、Yiiがあなたの日付が(日付ではなく)文字列であると考えていることのようです。DataProviderに日付を指定するように移行すると、並べ替えがうまくいく場合があります。

于 2012-06-26T20:24:58.283 に答える
1

私を正しい方向に向けてくれてありがとう。実際、私の例の「データム」列は文字列です。これは、仮想属性を使用して、アプリケーション全体でドイツ語で日付を正しくフォーマットする必要があるためです。ここで、データベースの元の日付列を使用して、次のようにビューでフォーマットします。

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

=>出来上がり、ドイツ語の表示、正しく並べ替えることができます。

于 2012-06-27T13:26:41.893 に答える