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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
自定义php类(查找/修改)xml文档
Mar 26 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
PHP微信支付开发实例
Jun 22 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
PHP空值检测函数与方法汇总
Nov 19 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python编写登陆接口的方法
2017/07/10 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
如何用python处理excel表格
2020/06/09 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
利用python进行文件操作
2020/12/04 Python
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
两道JAVA笔试题
2016/09/14 面试题
土木工程毕业生自荐信
2013/11/12 职场文书
公司开除员工通知
2015/04/22 职场文书
2015年领班工作总结
2015/04/29 职场文书
原告代理词范文
2015/05/25 职场文书
关于远足的感想
2015/08/10 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
python如何获取网络数据
2021/04/11 Python
mysql数据库隔离级别详解
2022/06/16 MySQL