Yii CGridView动态dataProvider

时间:2012-08-30 13:24:29

标签: yii

有没有办法使用自定义'dataProvider'选项重新渲染包含CGridView的视图?例如,我有这样的视图文件

<?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'
        ),
    ),
)); ?>

作为提供者,我有$model->search(),但我想要,例如,如果按钮按下此视图,则通过具有不同dataProvider的ajax重新呈现。有没有办法实现这个目标?感谢。

3 个答案:

答案 0 :(得分:3)

您可以通过多种方式完成此操作。 其中,您可以让控制器为视图提供$ dataProvider,如下所示:

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

控制器可以根据到达该请求的参数来实例化所需的数据提供者。然后视图将此数据提供程序传递给CGridView,完全忘记了它的精确类型。

如前所述,您可以扩展CDataProvider(与CActiveDataProvider扩展相同的类),只要它提供了所需的API,就可以完全自定义它。见其documentation

答案 1 :(得分:1)

数据提供者的要点是根据某些输入为您提供某个模型的适当数据。 Search()做得很好,因为您只需要使用要搜索的相应属性来实例化一个模型类,数据提供者将为您提供符合该条件的所有数据。

如果要更改数据提供者的输出,可以使用修改后的search()函数扩展模型类。如果你试图将一个完全不同的模型传递给你的数据提供者,我会为它设置一个不同的视图,因为它无论如何都会有不同的列。

答案 2 :(得分:0)

动态CGridView上的这个wiki应该会给你很多想法。