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の新しいバージョンにアップグレードすると、アプリケーションが警告なしに古い動作に戻ることです。私はそれをお勧めしません。