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产生随机字符串函数
Dec 06 PHP
php字符串截取中文截取2,单字节截取模式
Dec 10 PHP
PHP 一个随机字符串生成代码
May 26 PHP
php编写一个简单的路由类
Apr 13 PHP
PHP小教程之实现链表
Jun 09 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
PHP如何使用cURL实现Get和Post请求
Jul 11 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 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
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
vue接口请求加密实例
2020/08/11 Javascript
python笔记(2)
2012/10/24 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python 多线程Threading初学教程
2017/08/22 Python
python决策树之CART分类回归树详解
2017/12/20 Python
Python聊天室程序(基础版)
2018/04/01 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
投标担保书范文
2014/04/02 职场文书
厂区绿化方案
2014/05/08 职场文书
我是特种兵观后感
2015/06/11 职场文书
如何通过cmd 连接阿里云服务器
2022/04/18 Servers
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript