Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays CGridView显示来自数据提供程序的数据_Arrays_Yii_Dataprovider_Cgridview - Fatal编程技术网

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);
      },
    ),
  ),
));