首页 > 代码库 > 使用zii.widgets.CDetailView显示内容

使用zii.widgets.CDetailView显示内容

Yii里的CDetailView可以用来显示详细内容,有时会遇到显示的html内容是被转义过的,也就是原本是要显示html样式的,结果显示出来的内容却是把html当作普通文本了。

先看一个CDetailView的典型应用:

$this->widget(‘zii.widgets.CDetailView‘, array(    ‘data‘=>$model,    ‘attributes‘=>array(        ‘title‘,             // title attribute (in plain text)        ‘owner.name‘,        // an attribute of the related object "owner"        ‘description:html‘,  // description attribute in HTML        array(               // related city displayed as a link            ‘label‘=>‘City‘,            ‘type‘=>‘raw‘,            ‘value‘=>CHtml::link(CHtml::encode($model->city->name),                                 array(‘city/view‘,‘id‘=>$model->city->id)),        ),    ),));

这里的attributes,详列视图中要显示的一系列属性。 每个数组元素代表显示一个特定的属性规范。


一个属性可以被指定为array的格式来定义元素,也可以是一个字符串,使用格式"Name:Type:Label"。 "Type"和"Label"是可选的。

"Name" 表示属性名称,可以是一个属性(e.g. "title") 或者是一个属性的属性 (e.g. "owner.username").

"Label" 表示显示的字符串. 如果不指定"Label", 将会直接显示"Name"的值.

"Type" 代表属性的显示形式. 这个参数决定了属性值以什么形式格式化并显示. 如果不指定,默认值是‘text‘.
"Type" 如:"Type" 设置为 "xyz" 则表示有CFormatter类的"formatXyz"这个函数会被格式化器调用。可以取值CFormatter可用的raw,text,ntext,html,date,time,datetime,boolean,number,email,image,url
值。

目前CFormatter可用的值列表详述如下:
raw: 不处理,原文直接输出.
text: 将文本htmlencode编码后输出.
ntext: 将文本htmlencode编码,并将换行符(\n)同时编码成<br />.
html: 将文本作为html输出,即富文本输出.
date: 格式化日期.
time: 格式化时间.
datetime: 格式化日期时间.
boolean: 格式化为布尔值.
number: 格式化为数字.
email: 格式成email的link,可以直接点击的那种.
image: 作为图片输出,属性值处理作为<img>标签src的值.
url: 处理成链接,输出.

这里的image是将属性值直接赋值给<img>的src,如果需要加其它前缀,很不方便,我扩展了这个功能,增加了一个wimage函数:
加到这个文件里,/framework/utils/CFormatter.php, 一般来说不建议直接修改框架 :)

public function formatWimage($value){    $pre = ‘http://img.wangxing.com/‘;    return CHtml::image($pre .$value);}

这样就可以自动增加带http的前缀了。