0

次の表があります。

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 が文字列であると想定し、配列を指定します

また、これが組み込みの高度な検索でも機能するかどうかはわかりません。

ここで誰かが親切に私を正しい方向に向けることができますか?

4

1 に答える 1

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 を使用します。それを使用しない場合は、それに応じてリンク生成を変更する必要があります。

乾杯

于 2012-12-14T06:48:32.090 に答える