Yii中render和renderPartial的区别


Posted in PHP onSeptember 03, 2014

以下由我们在信易网络公司开发项目的时候终结出的一些经验
在进行页面输出渲染的时候。

1.render 输出父模板的内容,将渲染的内容,嵌入父模板。|
2.renderPartial 则不输出父模板的内容。只对本次渲染的局部内容,进行输出。

同时还有个重要的区别:

render 函数内部默认执行processOutput($output)函数, 会将把组件,比如 CTreeView 里面注册到 CClientScript 里面的
需要的脚本进行渲染输出。

而renderPartial() 默认不自动渲染输出客户端脚本,需要进行参数的指定,才会输出:
renderPartial($view,$data=null,$return=false,$processOutput=false)
指定processOutput 为 true 即可。

比如要局部输出 CTreeView ,用renderPartial 进行渲染,如果按照默认processOutput=false 则输出内容,不含有客户端脚本
输出内容则为 正常的 ul 列表。没有树形的折叠效果。 主动设定 processOutput=true 后,CTreeView 所需的,所有客户端脚本就会被正常输出在列表的前面。

下面介绍下要用到的几个相关的函数:

render,renderPartial 不再介绍
processOutput()

<?php
publicfunction render($view,$data=null,$return=false)
{
  if($this->beforeRender($view))
  {
    $output=$this->renderPartial($view,$data,true);
    if(($layoutFile=$this->getLayoutFile($this->layout))!==false)
      $output=$this->renderFile($layoutFile,array('content'=>$output),true);
    $this->afterRender($view,$output);
    $output=$this->processOutput($output);
    if($return)
      return $output;
    else
      echo $output;
  }
}
publicfunction renderPartial($view,$data=null,$return=false,$processOutput=false)
{
  if(($viewFile=$this->getViewFile($view))!==false)
  {
    $output=$this->renderFile($viewFile,$data,true);
    if($processOutput)
      $output=$this->processOutput($output);
    if($return)
      return $output;
    else
      echo $output;
  }
  else
    thrownewCException(Yii::t('yii','{controller} cannot find the requested view "{view}".',
      array('{controller}'=>get_class($this),'{view}'=>$view)));
}
publicfunction processOutput($output)
{
  Yii::app()->getClientScript()->render($output);
  // if using page caching, we should delay dynamic output replacement
  if($this->_dynamicOutput!==null&& $this->isCachingStackEmpty())
  {
    $output=$this->processDynamicOutput($output);
    $this->_dynamicOutput=null;
  }
  if($this->_pageStates===null)
    $this->_pageStates=$this->loadPageStates();
  if(!empty($this->_pageStates))
    $this->savePageStates($this->_pageStates,$output);
  return $output;
}

以上在实际操作中还是比较有用的,比如你不想用大组建,可以直接将变量输到模板,也可以将多个变量组成数组输到模版里面去.

PHP 相关文章推荐
php for 循环语句使用方法详细说明
May 09 PHP
php的memcached客户端memcached
Jun 14 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 PHP
php实例化一个类的具体方法
Sep 19 PHP
调试php程序的简单步骤
Oct 04 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 #PHP
Fedora下安装php Redis扩展笔记
Sep 03 #PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 #PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 #PHP
PHP高级编程实例:编写守护进程
Sep 02 #PHP
php输入流php://input使用浅析
Sep 02 #PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 #PHP
You might like
YII路径的用法总结
2014/07/09 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP实现文件下载详解
2014/11/27 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
Python有序字典简单实现方法示例
2017/09/28 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
python用requests实现http请求代码实例
2019/10/31 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
Html5 localStorage入门教程
2018/04/26 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
J2EE包括哪些技术
2016/11/25 面试题
物理专业本科生自荐信
2014/01/30 职场文书
银行贷款收入证明
2014/10/17 职场文书
2014年实验室工作总结
2014/12/03 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers