Yii中render和renderPartial的区别

在进行页面输出渲染的时候。

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()

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

<?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;

}

时间: 2024-11-08 21:46:03

Yii中render和renderPartial的区别的相关文章

Yii render和renderPartial的区别

以下由我们在信易网络公司开发项目的时候终结出的一些经验 在进行页面输出渲染的时候. 1.render 输出父模板的内容,将渲染的内容,嵌入父模板.|2.renderPartial 则不输出父模板的内容.只对本次渲染的局部内容,进行输出.同时还有个重要的区别: render 函数内部默认执行processOutput($output)函数, 会将把组件,比如 CTreeView 里面注册到 CClientScript 里面的需要的脚本进行渲染输出. 而renderPartial() 默认不自动渲染

rails中render 和 redirect_to的区别, each只能用在数组中,如果只有一个或者零个项,用each方法会报错undefined method `each&#39; for #...

在render中,即使有:action,那么也仅仅是取对应的view中的模板(html.erb)而已,所以这里即使浏览器中的url是/orders/xcreate,但是显示的界面是/app/views/orders/xshow的代码 def xcreate flash.now[:notice] = "bb" @order = Order.new(params[:order]) if @order.save flash[:notice] = "yes" render(

yii 中render 和renderpartical的使用

render 和renderpartical之间最大的区别就是:一个是渲染模板,一个不渲染模板. 其中render 输出父模板的内容,将渲染的内容,嵌入父模板. renderPartial 则不输出父模板的内容.只对本次渲染的局部内容,进行输出. render函数的说明如下: public function render($view,$data=null,$return=false){    if($this->beforeRender($view))    {        $output=$

在yii中使用分页

yii中使用分页很方便,如下两种方法: 在控制器中: 1. $criteria = new CDbCriteria(); //new cdbcriteria数据库$criteria->id = 'id ASC'; //排序规则 $count = Exchange::model()->count($criteria); $pager = new CPagination($count); $pager->pageSize=30; $pager->applyLimit($criteria

Yii 中的createUrl和redirectUrl

Yii  这两个url表示方法容易混淆,区别如下: $this->CreateUrl('控制器/方法',get参数); $this->CreateUrl('方法');              //当前控制器 $this->CreateUrl('控制器/方法');              //从当前控制器跳转到其他的控制器 $this->CreateUrl('控制器/方法',array('id'=>1));      //同上,传get参数,数组形式 $this->C

[ASP.NET MVC]@Partial 和@RenderPartial的区别

@Partial 和@RenderPartial的区别 Html.partial和RenderPartial的用法与区别 Html.partial和RenderPartial都是输出html片段,区别在于Partial是将视图内容直接生成一个字符串并返回(相当于有个转义的过程),RenderPartial方法是直接输出至当前 HttpContext(因为是直接写入响应输出流,所以性能好).因此它们在视图中的使用方式是不同的: @{Html.RenderPartial("SomeView"

Yii中验证码的设置(五)

好久没写了,正好有时间了,把之前想写的先写上.关于yii中的验证码,这里介绍下验证码的使用,比如后台登陆的时候输入完用户名和密码后,需要再输入验证码这样会更加的安全. 从总体来说 大概分为4个步骤 1.在对用的控制器里建一个新的控制器方法(actions) 2.输入验证码的文本框也用小物件 3.修改关于验证码的核心类文件(CCapthcaAction) 因为存在一点bug 4.然后就是在model里的rules设置规则,判断输入的验证码是否正确了 接下来就详细说下吧 1.我是在后台登陆页面里用

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

lua中的pairs和ipairs区别

pairs Returns three values: the next function, the table t, and nil, so that the construction for k,v in pairs(t) do body end will iterate over all key–value pairs of table t. See function next for the caveats of modifying the table during its traver