2012-08-30 3 views
1

사용자 정의 'dataProvider'옵션을 사용하여 CGridView가 포함 된보기를 다시 렌더링하는 방법이 있습니까? 예를 들어 나는 $model->search()이 공급자와 같은 뷰 파일Yii CGridView dynamic dataProvider

<?php $this->widget('bootstrap.widgets.BootGridView',array(
    'id'=>'operations-grid', 
    'type'=>'striped bordered', 
    'dataProvider'=>$model->search(),  
    'columns'=>array(
     array('name'=>'operationType','value'=>'$data->operationType->name'), 
     array(
      'name'=>'creation_date','type'=>'datetime' 
     ), 
     'ammount_usd:raw:Ammount', 
     'comment:text:Comment', 
     array(
      'name'=>'currency', 
      'value'=>'$data->currency->short', 
     ), 
     array(
      'name'=>'client', 
      'value'=>'$data->client->fio' 
     ), 
     array(
      'name'=>'organization', 
      'value'=>'$data->organization->name' 
     ), 

     array(
      'class'=>'bootstrap.widgets.BootButtonColumn', 
      'header'=>'Action' 
     ), 
    ), 
)); ?> 

을 가지고 있지만 버튼이 다른 dataProvider와 아약스를 통해 다시 렌더링 할이보기를 누르면 있다면, 예를 들어합니다. 이것을 달성 할 수있는 방법이 있습니까? 감사.

답변

3

여러 가지 방법으로이 작업을 수행 할 수 있습니다. 있는 가운데, 당신은 컨트롤러가이 같은 $의 dataProvider에보기를 제공하도록 할 수 있습니다 :

$this->widget('bootstrap.widgets.BootGridView',array(
'id'=>'operations-grid', 
'type'=>'striped bordered', 
'dataProvider'=>$dataProvider, 

이 컨트롤러는 해당 요청에 도착 매개 변수를 기반으로 필요한 데이터 공급자를 인스턴스화 할 수있다. 뷰는이 데이터 공급자를 CGridView로 전달하여 정확한 유형을 완전히 망각합니다.

이미 언급 한 것처럼 CDataProvider (CActiveDataProvider가 확장하는 것과 동일한 클래스)를 확장하여 필요한 API를 제공하는 한 완전히 사용자 정의 할 수 있습니다. 그것의 documentation

1

dataprovider는 특정 입력에 따라 특정 모델에 대한 적절한 데이터를 제공합니다. Search()는 검색하려는 적절한 속성으로 모델 클래스를 인스턴스화하기 만하면되므로 잘 수행됩니다. 그러면 dataprovider가 해당 기준과 일치하는 모든 데이터를 제공합니다.

dataprovider의 출력을 그 이상으로 변경하려면 수정 된 search() 함수를 사용하여 모델 클래스를 확장 할 수 있습니다. 데이터 제공자에게 전달 된 완전히 다른 모델을 얻으려고한다면 어쨌든 다른 열을 가지므로 다른 뷰를 설정해야합니다.

0

이 위키의 동적 인 CGridView은 많은 아이디어를 제공합니다.