2013-08-26 34 views
0

我在尝试将多个dataProvider传递给Yii中的ClistView时遇到了一些麻烦。什么是正确的做法?如何将多个dataProviders传递给CListView

我已经试过:

$this->widget('zii.widgets.CListView', array(


'dataProvider'=>array($dataProvider, $dataProvider2), 

我也看了一下这个What is the best method to merge two PHP objects?。不知道是否最好的方法是尝试使用纯PHP来完成,或者如果框架有这个选项,并且我错过了它们。

感谢任何帮助。

感谢

强尼

+2

通过设计,你只能一个数据提供者传递到ListView或GridView控件。其他任何事情都没有多大意义。您最好尝试从提供商处获取合并的数据。 –

+0

@MichaelHärtl谢谢迈克尔,你帮了我很多。如果你想把这个作为答案,我会接受它。 – Jonnny

回答

1

在这样的情况下,我发展我自己的CListView中:

class MyClistView extends CListView{ 

} 

的数据提供程序需要CListView中,以便传递ArrayDataProvider包含您的dataProvider并重复他们,不要忘记实现逻辑进行渲染。

PS:不要忘了去看看,以CBaseListView

2

最简单的事情是,如果你有两个模型之间的relation。 然后,你可以输出为是在你的ItemView控件:

echo $data->relationItem; 

// Or if it is a HAS_MANY relation 
foreach ($data->relationItems as $i) 
    echo $i->something; 

不是您所追求的?

另一种解决方案可能是迭代你的模型,挑选你想要的东西到一个新的数组中,然后使用CArrayDataProvider将它提供给你的ClistView。

+0

谢谢Ippi。这不是我所追求的,这是两个非常不同的CSqlDataProvider模型。我还没有看到任何真正的答案,所以我认为迈克尔可能总结得最好。但是,谢谢,这可能对我和其他人有帮助。 – Jonnny