Yii 中是否有全局设置来更改 htmlentity 显示"©" to "©"
对于管理员(ajax 网格(/视图/和编辑视图?
我发现在 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
Yii 中没有内置这样的功能,但通常情况下,你可以扩展几个类来实现目标。
首先,请注意,这是您要更改其默认值的属性。如果你能做到¹,那么所有的问题都会消失。
由于您不能,因此您需要扩展CDataColumn
才能实现此目的。死得很简单:
Yii::import('zii.widgets.grid.CDataColumn');
class SpecialDataColumn extends CDataColumn {
public $type = 'raw'; // that's all!
}
现在的问题是你还需要告诉 Yii 使用你的特殊列类而不是内置的。您可以通过在CGridView
实例化中指定每列的type
来执行此操作,但这是不可接受的,因为您仍然需要编辑每个视图中的每一列。因此,我们必须研究CGridView
如何决定使用CDataColumn
并覆盖它。
稍微嘎嘎嘎�具体来说,有两条兴趣线:
$column=$this->createDataColumn($column);
和
$column['class']='CDataColumn';
因此,您需要重写createDataColumn
方法(更改第一行的功能(和initColumns
方法(编辑第二行(。来吧:
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)
}
}
完成此操作后,您离幸福仅差一个编辑:
this->widget('SpecialGridView', ...);
您仍然需要在使用数据网格的每个视图中进行此编辑,但使用查找/替换时,这不应超过几秒钟。
¹ 实际上,您只需转到框架源中的该文件,编辑几个字符,保存,解决问题。这种方法的问题在于,如果你升级到更高版本的 Yii,你的应用程序将在没有警告的情况下恢复到旧的行为。我不推荐它。
查看 Yii 的小部件工厂设置。我不确定它是否可以让您指定 CDataColumn 的选项,但这是您可以做到的地方
编辑:看起来你不能以这种方式覆盖CGridColumn设置,因为它不直接从小部件类继承。因此,最好的办法可能是覆盖 CGridView,为默认列指定自定义类,并以这种方式设置公共变量 type='raw'。
你也许可以使用widgetfactory来覆盖CGridView的默认类,但我还没有这样做。因此,您可能被迫更新所有 CGridView 位置以使用新的 CGridView 类覆盖。