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 相关文章推荐
oracle资料库函式库
Oct 09 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php ci框架验证码实例分析
Jun 26 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
Yii框架分页实现方法详解
May 20 PHP
yii插入数据库防并发的简单代码
May 27 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
session在PHP大型web应用中的使用
2011/06/25 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python with语句用法原理详解
2020/07/03 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
感恩节活动策划方案
2014/05/16 职场文书
团日活动总结怎么写
2014/06/25 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
2014年教研工作总结
2014/12/06 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
人民调解协议书
2016/03/21 职场文书