Yii中是否存在全局设置以更改"©" to "©"
的htmlentity显示
for admin(ajax grid)/ view / and edit views?
我发现在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
答案 0 :(得分:4)
Yii没有内置这样的功能,但通常情况下你可以扩展几个类来实现目标。
首先,请注意this是您要更改其默认值的属性。如果你能做到这一点,那么所有的问题都会消失。
既然你不能,你需要扩展CDataColumn
来实现这一目标。死简单:
Yii::import('zii.widgets.grid.CDataColumn');
class SpecialDataColumn extends CDataColumn {
public $type = 'raw'; // that's all!
}
现在的问题是你还需要告诉Yii使用你的特殊列类而不是内置的。您可以通过在type
实例化中指定每列的CGridView
来执行此操作,但这是不可接受的,因为您仍然需要编辑每个视图中的每个列。因此,我们必须研究CGridView
如何决定使用CDataColumn
并覆盖它。
稍微提示一下,this是您需要修改的代码。具体来说,有两条感兴趣的路线:
$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', ...);
您仍需要在使用数据网格的每个视图中进行此编辑,但使用find / replace时不应超过几秒钟。
¹实际上,你可以简单地转到框架源内的那个文件,编辑几个字符,保存,问题解决了。此方法的问题在于,如果升级到更高版本的Yii,您的应用程序将在没有警告的情况下恢复到旧行为。我不推荐它。
答案 1 :(得分:1)
查看Yii的widgetfactory设置。我不确定它是否会让你为CDataColumn指定选项,但这是你可以做到的,你可以
编辑:看起来你不能以这种方式覆盖CGridColumn设置,因为它不直接从widget类继承。所以你最好的选择可能是覆盖CGridView,为你的默认列指定一个自定义类,并设置公共变量type ='raw'。
您可以使用widgetfactory覆盖CGridView的默认类,但我还没有这样做。因此,您可能会被迫更新所有CGridView位置以使用新的CGridView类覆盖。