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+xslt在windows平台上
Oct 09 PHP
PHP 开源AJAX框架14种
Aug 24 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
php-fpm添加service服务的例子
Apr 27 PHP
PHP常量define和const的区别详解
May 18 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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 输出缓存详解
2009/06/20 PHP
php 调用远程url的六种方法小结
2009/11/02 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php后门URL的防范
2013/11/12 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
用Python实现换行符转换的脚本的教程
2015/04/16 Python
python统计中文字符数量的两种方法
2019/01/31 Python
详解Python3中的 input() 函数
2020/03/18 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
家长给小学生的评语
2014/01/30 职场文书
应届生自荐信范文
2014/02/21 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
员工开除通知书
2015/04/25 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
sql字段解析器的实现示例
2021/06/23 SQL Server
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python