Yii中render和renderPartial的區(qū)別
以下由我們?cè)谛乓拙W(wǎng)絡(luò)公司開(kāi)發(fā)項(xiàng)目的時(shí)候終結(jié)出的一些經(jīng)驗(yàn)
在進(jìn)行頁(yè)面輸出渲染的時(shí)候。
1.render 輸出父模板的內(nèi)容,將渲染的內(nèi)容,嵌入父模板。|
2.renderPartial 則不輸出父模板的內(nèi)容。只對(duì)本次渲染的局部?jī)?nèi)容,進(jìn)行輸出。
同時(shí)還有個(gè)重要的區(qū)別:
render 函數(shù)內(nèi)部默認(rèn)執(zhí)行processOutput($output)函數(shù), 會(huì)將把組件,比如 CTreeView 里面注冊(cè)到 CClientScript 里面的
需要的腳本進(jìn)行渲染輸出。
而renderPartial() 默認(rèn)不自動(dòng)渲染輸出客戶端腳本,需要進(jìn)行參數(shù)的指定,才會(huì)輸出:
renderPartial($view,$data=null,$return=false,$processOutput=false)
指定processOutput 為 true 即可。
比如要局部輸出 CTreeView ,用renderPartial 進(jìn)行渲染,如果按照默認(rèn)processOutput=false 則輸出內(nèi)容,不含有客戶端腳本
輸出內(nèi)容則為 正常的 ul 列表。沒(méi)有樹(shù)形的折疊效果。 主動(dòng)設(shè)定 processOutput=true 后,CTreeView 所需的,所有客戶端腳本就會(huì)被正常輸出在列表的前面。
下面介紹下要用到的幾個(gè)相關(guān)的函數(shù):
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; }
以上在實(shí)際操作中還是比較有用的,比如你不想用大組建,可以直接將變量輸?shù)侥0?也可以將多個(gè)變量組成數(shù)組輸?shù)侥0胬锩嫒?
- YII Framework的filter過(guò)濾器用法分析
- PHP的Yii框架中過(guò)濾器相關(guān)的使用總結(jié)
- Yii凈化器CHtmlPurifier用法示例(過(guò)濾不良代碼)
- Yii控制器中操作視圖js的方法
- 詳解PHP的Yii框架中的Controller控制器
- Yii使用find findAll查找出指定字段的實(shí)現(xiàn)方法
- 從零開(kāi)始學(xué)YII2框架(五)快速生成代碼工具 Gii 的使用
- Yii框架form表單用法實(shí)例
- Yii查詢生成器(Query Builder)用法實(shí)例教程
- yii2.0之GridView自定義按鈕和鏈接用法
- Yii控制器中filter過(guò)濾器用法分析
相關(guān)文章
MySQL時(shí)間字段究竟使用INT還是DateTime的說(shuō)明
今天解析DEDECMS時(shí)發(fā)現(xiàn)deder的MYSQL時(shí)間字段,都是用INT類型,隨后又在網(wǎng)上找到這篇文章,看來(lái)如果時(shí)間字段有參與運(yùn)算,用int更好,一來(lái)檢索時(shí)不用在字段上轉(zhuǎn)換運(yùn)算,直接用于時(shí)間比較!二來(lái)如下所述效率也更高2012-02-02php array_merge下進(jìn)行數(shù)組合并的代碼
array_merge();合并兩個(gè)數(shù)組,如果數(shù)組的鍵名是字符,而且兩個(gè)數(shù)組的鍵名是相同的字符,2008-07-07Windows下利用Gvim寫PHP產(chǎn)生中文亂碼問(wèn)題解決方法
昨天本來(lái)說(shuō)早點(diǎn)睡覺(jué)呢,沒(méi)想到一個(gè)在寫PHP程序的時(shí)候發(fā)現(xiàn)出現(xiàn)的亂碼問(wèn)題又睡晚了,不過(guò)總算解決了。2011-04-04php中session_unset與session_destroy的區(qū)別分析
關(guān)于session_unset()和session_destroy()的函數(shù)使用進(jìn)行介紹。學(xué)習(xí)php的朋友可以參考下。2011-06-06phpmyadmin提示The mbstring extension is missing的解決方法
這篇文章主要介紹了phpmyadmin提示The mbstring extension is missing的解決方法,分析了錯(cuò)誤提示的原因與不同平臺(tái)的解決方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12php self,$this,const,static,->的使用
用php這么久了,慚愧的是,原來(lái)自己還一直沒(méi)分清楚這幾個(gè)關(guān)鍵字使用方法。2009-10-10PHP 預(yù)定義變量、魔術(shù)常量和魔術(shù)方法功能與用法小結(jié)
這篇文章主要介紹了PHP 預(yù)定義變量、魔術(shù)常量和魔術(shù)方法,總結(jié)分析了PHP 預(yù)定義變量、魔術(shù)常量和魔術(shù)方法基本概念、原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04