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 相关文章推荐
example1.php
Oct 09 PHP
用PHP和ACCESS写聊天室(四)
Oct 09 PHP
PHP 工厂模式使用方法
May 18 PHP
preg_match_all使用心得分享
Jan 31 PHP
php实现将字符串按照指定距离进行分割的方法
Mar 14 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
laravel-admin的多级联动方法
Sep 30 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 高手之路(一)
2006/10/09 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python实现数据库跨服务器迁移
2018/04/12 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
Python ATM功能实现代码实例
2020/03/19 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
如何在django中实现分页功能
2020/04/22 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
保密工作责任书
2014/04/16 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android