Arrays CGridView显示来自数据提供程序的数据
我有一个数据提供商,它可以生成以下内容:Arrays CGridView显示来自数据提供程序的数据,arrays,yii,dataprovider,cgridview,Arrays,Yii,Dataprovider,Cgridview,我有一个数据提供商,它可以生成以下内容: array( [0] => ParentObjects array( Child1Object array(...), Child2Object array(...), ) ) 此数组的第一级始终为1。 我想在CGridView中显示两个孩子的内容 $dataProvider=new CActiveDataProvider('Campanii', array( 'criteria'=&g
array(
[0] => ParentObjects array(
Child1Object array(...),
Child2Object array(...),
)
)
此数组的第一级始终为1。
我想在CGridView中显示两个孩子的内容
$dataProvider=new CActiveDataProvider('Campanii', array(
'criteria'=>array(
'with'=>array('stocs','produse'),
),
'pagination'=>array(
'pageSize'=>20,
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array('name'=>'Cod','value'=>'$data->stocs[0]->cod_produs'),
),
));
如您所见,列cod
的值为array('name'=>'cod','value'=>'$data->stocs[1]->cod\u produs')
。请注意[0]。我想要的不是零,而是迭代器。在本例中,它在一列中显示该属性的内容
这可能吗?是的,您可以编写任何复杂的表达式。但是,为了可读性,最好使用实际函数。本例假设PHP5.3+,如果您的环境不支持,只需创建一个普通函数而不是匿名函数(或者找到一个更好的环境)
这不是我想要的。我想在表格的每一行上显示
$data->stocs
的内容,而不是在单元格内。你能用一个例子重新表述一下吗?我不想所有的$data->stocs[0]->cod produs
都在单元格内。我想在桌子的另一行显示它们。我试图展示两种型号(stocs
,produse
),它们位于另一种型号Campanii
中。很快,我的表必须显示Campanii
“container”中stocs
和produse
的内容。对不起,我不相信通过CGridView可以实现您想要的(不同的行类型)。我的替代方法是创建CModelForm
,将来自stocs
和produse
的数据放入CModelForm
数组中,创建一个CArrayDataProvider
并将其传递给“CGridView”。
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'columns' => array(
array(
'name' => 'Cod',
// needed when returning HTML instead of plain text
'type' => 'raw',
// this function is called each time a cell needs to be rendered
'value' => function(Companii $data) {
$codes = array();
foreach($data->stocs as $stoc) {
$code = CHtml::encode($stoc->cod_produs);
$codes []= CHtml::tag('li', array(), $code);
}
$codes = implode("\n", $codes);
return CHtml::tag('ul', array(), $codes);
},
),
),
));