了解知识
Yii 允许开发者使用他们喜爱的模板句法 (例如Prado,Smarty) 来编写控制器或 widget 的视图。 这通过编写和安装一个 viewRenderer 应用组件来实现。The view renderer intercepts the invocations of CBaseController::renderFile, compiles the view file with customized template syntax, and renders the compiling results.
信息: 推荐只有当编写很少被重用的视图时才使用自定义的模板句法。 否则,若他人重用此视图,将不得不在他们的应用中也使用相同的模板句法。
下面,我们介绍如何使用 CPradoViewRenderer, 它是一个视图渲染器,允许你使用使用类似于 Prado 框架framework 中的模板句法。 对于那些要开发自己视图渲染器的开发者,CPradoViewRenderer 是个好的参考。
使用 CPradoViewRenderer
要使用CPradoViewRenderer, 我们只需要如下配置应用:
return array(
'components'=>array(
......,
'viewRenderer'=>array(
'class'=>'CPradoViewRenderer',
),
),
);
默认情况下,CPradoViewRenderer 将编译视图文件源码并保存结果PHP文件到runtime 目录中。 只有当视图文件源码被改变时,PHP 文件才被重新生成。 因此,使用 CPradoViewRenderer 只遭受很小的性能损失。
提示: CPradoViewRenderer 主要引入了一些新模板标签 以使得更容易更快地编写视图,在视图源码中你仍然可以使用 PHP 代码。
下面,我们介绍CPradoViewRenderer 支持的模板标签。
短 PHP 标签
短 PHP 标签是在一个视图中编写 PHP 表达式和语句的快捷方式。 表达式标签 <%= expression %> 被翻译为 <?php echo expression ?>; 语句标签 <% statement %> 被翻译为 <?php statement ?>。例如,
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
被翻译为
<?php echo CHtml::textField($name,'value'); ?>
<?php foreach($models as $model): ?>
组件标签
组件标签被用来在一个视图中插入 widget。 它使用如下句法:
<com:WidgetClass property1=value1 property2=value2 ...>
// body content for the widget
</com:WidgetClass>
 
// a widget without body content
<com:WidgetClass property1=value1 property2=value2 .../>
WidgetClass 指定 widget 类名字或类的 路径别名, 属性初始值可以使用引起来的字符串或一对弯括号引起来的 PHP 表达式。例如,
<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />
将被翻译为
<?php $this->widget('CCaptcha', array(
'captchaAction'=>'captcha',
'showRefreshButton'=>false)); ?>
注意: showRefreshButton 的值被指定为 {false} 而不是 "false" 因为后者意味着是一个字符串而不是一个 boolean.
缓存标签(Cache Tags)
缓存标签是使用 片段缓存 的快捷方式,它的句法如下,
<cache:fragmentID property1=value1 property2=value2 ...>
// content being cached
</cache:fragmentID >
fragmentID 应当是一个唯一标识被缓存内容的识别符, 属性-值 对被用来配置这个片段缓存。例如,
<cache:profile duration={3600}>
// user profile information here
</cache:profile >
将被翻译为
<?php if($this->cache('profile', array('duration'=>3600))): ?>
// user profile information here
<?php $this->endCache(); endif; ?>
Clip Tags
类似于缓存标签,clip tags 使用 CBaseController::beginClip 和 CBaseController::endClip 的快捷方式。句法如下,
<clip:clipID>
// content for this clip
</clip:clipID >
clipID 是一个唯一识别clip content的识别符。上面的内容翻译如下
<?php $this->beginClip('clipID'); ?>
// content for this clip
<?php $this->endClip(); ?>
注释标签
注释标签被用来编写注释,只对开发者可见。注释标签在视图显示给用户时被截去。句法如下,
<!---
view comments that will be stripped off
--->
标签: Yii框架
扩展知识