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 is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
一个PHP的String类代码
Apr 20 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php基本函数汇总
Jul 09 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
php json相关函数用法示例
Mar 28 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 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
ThinkPHP之import方法实例详解
2014/06/20 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
js 替换
2008/02/19 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
python模块之StringIO使用示例
2015/04/08 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
python比较两个列表是否相等的方法
2015/07/28 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
python的文件操作方法汇总
2017/11/10 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
python isinstance函数用法详解
2020/02/13 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
人力资源主管职责范本
2014/03/05 职场文书
政府门卫岗位职责
2014/04/29 职场文书
教师节慰问信
2015/02/15 职场文书
技术转让协议书
2016/03/19 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS