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 相关文章推荐
杏林同学录(四)
Oct 09 PHP
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
php中的实现trim函数代码
Mar 19 PHP
改写函数实现PHP二维/三维数组转字符串
Sep 13 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 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
php数组比较实现查找连续数的方法
2015/07/29 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
js类型检查实现代码
2010/10/29 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
python3字符串输出常见面试题总结
2020/12/01 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
诚信的演讲稿范文
2014/05/12 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
小学见习报告
2015/06/23 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
python神经网络Xception模型
2022/05/06 Python