【问题标题】:CGridView show data from dataProviderCGridView 显示来自 dataProvider 的数据
【发布时间】:2013-01-04 23:13:19
【问题描述】:

我有一个数据提供者,它生成如下内容:

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_produs')。请注意 [0]。我想要一个迭代器之类的东西,而不是那个零。在这种情况下,它会在一列中显示该属性的内容。

这可能吗?

【问题讨论】:

    标签: arrays yii dataprovider cgridview


    【解决方案1】:

    是的,您可以编写任何您想要的复杂表达式。但是,为了便于阅读,最好使用实际函数。此示例假设 PHP 5.3+,如果您的环境不支持,只需创建一个普通函数而不是匿名函数(或寻找更好的环境)。

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

    【讨论】:

    • 这不是我想要的。我想在表格的每一行上显示$data->stocs 的内容,而不是在单元格内。
    • 你能用一个例子重新表述吗?
    • 我不希望我的所有$data->stocs[0]->cod_produs 都在一个单元格中。我想在表格的单独一行中显示它们。我试图展示两个模型 (stocs,produse),它们保存在另一个模型 Campanii 中。很快,我的表格必须显示来自Campanii“容器”的stocsproduse的内容
    • 我不相信你想要的(不同的行类型)可以通过 CGridView 实现,抱歉。
    • 我的替代方法是创建一个CModelForm,将来自stocsproduse 的数据放入CModelForm 的数组中,创建一个CArrayDataProvider 并将其传递给`CGridView。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多