2012-06-26 3 views
1

웹 사이트에서 CGridView를 사용하여 CArrayDataProvider를 통해 제공된 데이터를 표시하고 있습니다. 그 이유는 데이터가 다른 테이블에서 누적되고 추가로 계산 된 열이 풍부하기 때문입니다. 정렬 및 필터링은 일반적으로 부호 (... 생략 열)로 잘 작동된다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일, 2012년 3월 8일, 10.01.2012, 15.02.2012,

나는 물론 다음과 같이 올바르게 정렬 싶습니다 10.01.2012, 15.02.2012, 03.08.2012, 01.10.2012, ...

누구나 저에게 맞는 아이디어가 있습니까?

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

그것은 보이는 문제가 있음을 YII처럼 :

+0

날짜가 데이터베이스에 저장되는 방식, 즉 데이터를 저장하는 데 사용하는 데이터 유형은 무엇입니까? – Orlymee

답변

1

내가 대신 CGridView와 함께 데이터 소스에서 CArrayDataProvider에 원시 날짜/날짜 문자열에 보낸 다음 포맷해야 할 것 같아요 귀하의 날짜가 (날짜 대신) 문자열이라고 생각합니다. DataProvider에 날짜를 제공하는 것으로 이동하면 정렬 자체가 작동 할 수 있습니다.

+0

이것을 사용해 보셨습니까? 그런 식으로 작동합니까? 형식 날짜 만 지정하면됩니까? –

+0

아니요, 시도하지 않았습니다. 나는 내 제안이 완전히 문제를 해결할 것이라고 생각하지 않지만 올바른 방향으로 그를 지적해야한다. – acorncom

+0

그래서 당신 말이 맞아 +1 –

1

나를 올바른 방향으로 안내해 주셔서 감사합니다. 실제로 필자의 예제에서 'datum'열은 문자열이며, 가상 속성을 사용하여 응용 프로그램에서 독일어로 정확하게 날짜를 형식화해야하기 때문입니다. 올바르게 정렬 할 수있는,

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

=> 짜잔, 독일어 표시 : 지금은 데이터베이스에서 원래 날짜 열을 사용하여이 같은 관점에서 포맷.

+1

(처음에는 잘 했었던) dateFormatter를 사용하는 대신, CGridView를 자동 포맷 컬럼으로 가져 오는 비교적 알려진 작은 방법이 있습니다. 더 많은 것을 여기에서 보아라 : https://github.com/samdark/a-guide-to-yii-grids-lists-and-data-providers/blob/master/grid-columns.md 그것은 나에게 많은 시간을 절약한다! :-) – acorncom

+0

@acorncom 예, 저는 두 번째입니다. 열 정의에 'type'=> 'datetime'을 지정하면 기본 데이터가 datetime 일 때이를 수행 할 수 있습니다. – SoldierOfFortran