2

"©" to "©" admin(ajax grid)/ view /のhtmlentity表示を変更してビューを編集するためのグローバル設定がYiiにありますか?

CGridViewパラメーターで、各列を'type'=>'raw'次のように更新できることがわかりましたが、これは20のモデルで行う必要があり、グローバルにどこかで実行できない限り、各ビューを手動で行う必要があります。を使用してデータをインポートするスクリプトが ©あり、顧客がアイテムを編集するときに、を表示したいと考えています©。どんな助けでもありがたいです!

<?php $this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'item-grid',
        'dataProvider'=>$model->search(),
        'filter'=>$model,

        'columns'=>array(
                'id',
                'price1',
                'price1label',
                'price2',
                'price2label',
                array('name'=>'name','type'=>'raw'), // this will display the raw entity
4

2 に答える 2

4

Yiiにはそのような機能は組み込まれていませんが、通常の場合と同様に、目的を達成するためにいくつかのクラスを拡張できます。

まず、これがデフォルト値を変更したいプロパティであることに注意してください。それができれば¹、すべての問題は解決します。

できないので、CDataColumnこれを達成するために拡張する必要があります。シンプル:

Yii::import('zii.widgets.grid.CDataColumn');

class SpecialDataColumn extends CDataColumn {
    public $type = 'raw'; // that's all!
}

ここで問題となるのは、組み込みの代わりに特別な列クラスを使用するようにYiiに指示する必要があることです。typeインスタンス化で各列のを指定することでこれを行うことができますがCGridView、すべてのビューのすべての列を編集する必要があるという問題があるため、これは受け入れられません。CGridViewしたがって、を使用してCDataColumnそれをオーバーライドする方法を調べる必要があります。

少し調べてみると、これが変更する必要のあるコードであることがわかります。具体的には、次の2つの関心のある行があります。

$column=$this->createDataColumn($column);

$column['class']='CDataColumn';

createDataColumnしたがって、メソッド(最初の行の動作を変更するため)とinitColumnsメソッド(2番目の行を編集するため)をオーバーライドする必要があります。どうぞ:

Yii::import('zii.widgets.grid.CGridView');

class SpecialGridView extends CGridView {
    protected function initColumns() {
        // copy all of the stock implementation code, changing only
        // $column['class']='CDataColumn' to $column['class']='SpecialDataColumn'
    }

    protected function createDataColumn($text)
    {
        // copy all of the stock implementation code, changing only
        // $column=new CDataColumn($this) to $column=new SpecialDataColumn($this)
    }
}

これが行われた後、あなたは幸福から離れてもう1つの編集です:

this->widget('SpecialGridView', ...);

データグリッドを使用するすべてのビューでこの編集を行う必要がありますが、検索/置換で数秒以上かかることはありません。


¹実際には、フレームワークソース内のそのファイルに移動し、数文字を編集して保存し、問題を解決するだけですこのアプローチの問題は、Yiiの新しいバージョンにアップグレードすると、アプリケーションが警告なしに古い動作に戻ることです。私はそれをお勧めしません。

于 2012-05-09T09:34:05.527 に答える
1

Yii のwidgetfactory設定を調べてください。CDataColumn のオプションを指定できるかどうかはわかりませんが、これができる場所です。

編集: ウィジェット クラスから直接継承されないため、CGridColumn の設定をそのようにオーバーライドできないようです。したがって、CGridView をオーバーライドし、デフォルトの列にカスタム クラスを指定し、そのようにパブリック変数 type='raw' を設定するのが最善の策かもしれません。

widgetfactory を使用して CGridView のデフォルト クラスをオーバーライドできるかもしれませんが、私はそれを行っていません。そのため、新しい CGridView クラスのオーバーライドを使用するために、すべての CGridView の場所を更新する必要がある場合があります。

于 2012-05-09T04:14:56.117 に答える