【问题标题】:Yii display multiple Child elements as links in a CGridView FieldYii 将多个子元素显示为 CGridView 字段中的链接
【发布时间】:2012-12-14 06:04:21
【问题描述】:

我有下表:

CREATE TABLE "place" (
    "id" int8 NOT NULL DEFAULT nextval('place_id_seq'::regclass),
    "name" varchar(128) NOT NULL,
    "parent" int8,
    "description" varchar(100)
)
WITH (OIDS=FALSE);

(它是 PostgreSQL,但这里不应该相关)

我通过 giix 创建了 CRUD,并更改了一些关系以满足我的需要。所以我最终得到了:

public function relations() {
    return array(
        'parent0' => array(self::BELONGS_TO, 'Places', 'parent'),
        'places' => array(self::HAS_MANY, 'Places', 'parent'),
    );
}

这里的目标是一个地方可以属于另一个地方并且有多个子地方。

我的问题是我需要更改管理操作以匹配以下网格:

检查员操纵打印以反映所需的行为

所以我的问题是获取所有子对象的列表并将其显示为链接列表。我尝试将相应的 admin.php 视图文件更改为:

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'places-grid',
    'dataProvider' => new CActiveDataProvider('Places', array('id'=>$model->places)),
    'filter' => $model,
    'columns' => array(
        array(
                'name'=>'parent',
                'value'=>'GxHtml::valueEx($data->parent0)',
                'filter'=>GxHtml::listDataEx(Places::model()->findAllAttributes(null, true)),
                ),
        'name',
        'places',
        array(
            'class' => 'CButtonColumn',
        ),
    ),
));

但是,正如预期的那样,这是一个错误:

htmlspecialchars() 期望参数 1 是字符串,给定数组

我也不知道这是否适用于内置的高级搜索。

谁能给我指出正确的方向吗?

【问题讨论】:

  • 您的所有查询在 S.O 上已经有了解决方案,一次处理一个,首先使过滤器正确显示,然后进行搜索,然后是链接。使用 s.o.搜索,你会找到答案。

标签: php activerecord gridview yii


【解决方案1】:

经过大量搜索,我找到了解决问题的方法。不确定这是否是最好的方法,但效果很好:

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'places-grid',
    'dataProvider' => new CActiveDataProvider('Places', array('id'=>$model->places)),
    'filter' => $model,
    'columns' => array(
        array(
                'name'=>'parent',
                'value'=>'GxHtml::valueEx($data->parent0)',
                'filter'=>GxHtml::listDataEx(Places::model()->findAllAttributes(null, true)),
                ),
        'name',
        array(
        'header'=>'Children',
        'type'=>'html',
                'value'=> function($data) {
                    $placesLinks = array();
                    foreach ($data->places as $place) {
                        $placesLinks[] = GxHtml::link(GxHtml::encode(GxHtml::valueEx($place, 'name')), array('places/view', 'id' => GxActiveRecord::extractPkValue($place, true)));
                    }
                    return implode(', ', $placesLinks);
                }
        ),
        array(
            'class' => 'CButtonColumn',
        ),
    ),
));

这使用了 Giix。如果您不使用它,则必须相应地更改链接生成。

干杯

【讨论】:

  • 很高兴您有自己的解决方案工作,搜索请参阅here
猜你喜欢
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
相关资源
最近更新 更多