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 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 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
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
jquery异步请求实例代码
2011/06/21 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
python集合用法实例分析
2015/05/30 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
git进行版本控制心得详谈
2017/12/10 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
python队列Queue的详解
2019/05/10 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
html5唤起app的方法
2017/11/30 HTML / CSS
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
应届生学校辅导员求职信
2013/11/07 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
领导班子整改方案
2014/10/25 职场文书
基层党支部整改方案
2014/10/25 职场文书
家长通知书家长意见
2014/12/30 职场文书
幼儿园教师求职信
2015/03/20 职场文书
入党介绍人意见2015
2015/06/01 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS