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

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

以上在实际操作中还是比较有用的,比如你不想用大组建,可以直接将变量输到模板,也可以将多个变量组成数组输到模版里面去

本文由专注于成都网站建设的信易网络发布,更多关于yii的信息请关注信易网络随后的发布,信易网络的官网http://www.ir58.com

Yii render和renderPartial的区别,布布扣,bubuko.com

时间: 2024-10-14 09:51:51

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

Yii中render和renderPartial的区别

在进行页面输出渲染的时候. 1.render 输出父模板的内容,将渲染的内容,嵌入父模板.|2.renderPartial 则不输出父模板的内容.只对本次渲染的局部内容,进行输出. 同时还有个重要的区别: render 函数内部默认执行processOutput($output)函数, 会将把组件,比如 CTreeView 里面注册到 CClientScript 里面的需要的脚本进行渲染输出. 而renderPartial() 默认不自动渲染输出客户端脚本,需要进行参数的指定,才会输出:rend

Yii2 使用json 和设置component 中&#39;format&#39; =&gt; yii\web\Response::FORMAT_JSON 的区别

在Yii2中如果设置了 'response' => [  'format' => yii\web\Response::FORMAT_JSON,  'charset' => 'UTF-8',  // ... ], 代表了,控制器输出的全部都是json格式数据,即json字符串: 而如果使用Json::htmlEncode($price): 先引入use yii\helpers\Json; 可以在当前的action中生成json字符串,response对象把这个当普通文本输出 Yii2 使用

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(

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

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

vue渲染方式:render和template的区别

template----html的方式做渲染 render----js的方式做渲染 render(提供)是一种编译方式 render里有一个函数h,这个h的作用是将单文件组件进行虚拟DOM的创建,然后再通过render进行解析. h就是createElement()方法:createElement(标签名称,属性配置,children) template也是一种编译方式,但是template最终还是要通过render的方式再次进行编译. 区别: 1.render渲染方式可以让我们将js发挥到极致

关于 yii 验证码显示, 但点击不能刷新的处理

先说说 render 与 renderPartial, 各位看官, 先别走, 我没跑题, 这个问题如果需要解决, 关键就在 render 与 renderPartial 的区别. renderPartial() 方法 public string renderPartial(string $view, array $data=NULL, boolean $return=false, boolean $processOutput=false) $view string name of the vie

Yii-验证码不自动刷新

Yii中render和renderPartial的区别就能解释为什么不刷新的原因 在进行页面输出渲染的时候区别: 1.render 输出父模板的内容,将渲染的内容,嵌入父模板.|2.renderPartial 则不输出父模板的内容.只对本次渲染的局部内容,进行输出. 同时还有个重要的区别: render 函数内部默认执行processOutput($output)函数, 会将把组件,比如 CTreeView 里面注册到 CClientScript 里面的需要的脚本进行渲染输出. 而renderP

[Yii2] 快速套模板,加载JS,CSS(HTML标签&lt;base&gt;)

刚开始学,弄了好久,不知道怎么加载JS.CSS,以及怎么不加载YII2自带的模板!其实真的好简单! 首先把模板放好位置, 加载JS,CSS,就在模板HTML页面加个标签:<base> base 标签的链接到JS,CSS的位置就好了,其他都不用动! <base>这个标签其实就是HTML默认打开方式与默认链接URL地址标签元素,详细了解base就在我文章里找吧! 上面弄完后,就差YII2自带的怎么去掉了,就是渲染的时候用renderPartial render和renderPartia

@RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别

1. RenderBody在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中.在这个页面中,会看到标签里有这样一条语句: @RenderBody() 其实它的作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签之间. 这个方法不需要参数,而且只能出现一次.2. RenderPage从名称可以猜出来这个方法是要呈现一个