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 相关文章推荐
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
深入理解require与require_once与include以及include_once的区别
Jun 05 PHP
Linux编译升级php的详细方法
Nov 04 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
php实现异步数据调用的方法
Dec 24 PHP
symfony2.4的twig中date用法分析
Mar 18 PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 PHP
PHP 文件上传限制问题
Sep 01 PHP
laravel 实现用户登录注销并限制功能
Oct 24 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正则匹配汉字的方法介绍
2013/04/25 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
Django中FilePathField字段的用法
2020/05/21 Python
python小白学习包管理器pip安装
2020/06/09 Python
Keras自定义IOU方式
2020/06/10 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
有关打架的检讨书
2014/01/25 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
趣味比赛活动方案
2014/02/15 职场文书
初一学生评语大全
2014/04/24 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS