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模板页面中分页代码的解析
Feb 06 PHP
php 显示指定路径下的图片
Oct 29 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
PHP SOCKET编程详解
May 22 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
PHP微信支付开发实例
Jun 22 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
yii框架使用分页的方法分析
Jul 25 PHP
laravel框架使用极光推送消息操作示例
Feb 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
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php常用数学函数汇总
2014/11/21 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python实现分段线性插值
2018/12/17 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
《手指教学》反思
2014/02/14 职场文书
个人工作表现评语
2014/04/30 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
安全责任书范文
2014/08/25 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python