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 相关文章推荐
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
PHP可变函数学习小结
Nov 29 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
PHP大神的十大优良习惯
Sep 14 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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/29 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
js获取form的方法
2015/05/06 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python实现微信小程序自动回复
2018/09/10 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Python 在函数上添加包装器
2020/07/28 Python
8种常用的Python工具
2020/08/05 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
八一演出活动方案
2014/02/03 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
技术员岗位职责范本
2015/04/11 职场文书
民事辩护词范文
2015/05/21 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
浅谈Python协程asyncio
2021/06/20 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏