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.ini中文版(2)
Oct 09 PHP
用PHP实现WEB动态网页静态
Oct 09 PHP
php 中的str_replace 函数总结
Apr 27 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
php发送post请求函数分享
Mar 06 PHP
理解php依赖注入和控制反转
May 11 PHP
php车辆违章查询数据示例
Oct 14 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
PHP rsa加密解密算法原理解析
Dec 09 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
python 字符串格式化代码
2013/03/17 Python
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python实现抓取网页并且解析的实例
2014/09/20 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python异常处理操作实例详解
2018/08/28 Python
python实现超市商品销售管理系统
2019/10/25 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
Farah官方网站:男士服装及配件
2019/11/01 全球购物
就职演讲稿范文
2014/05/19 职场文书
会计求职自荐信
2014/06/20 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL