The following are some of the experiences we gained when developing projects at Xinyi Network Company
When rendering page output.
1.render outputs the content of the parent template and embeds the rendered content into the parent template. |
2.renderPartial does not output the content of the parent template. Only the partial content of this rendering is output.
At the same time, there is an important difference:
The processOutput($output) function is executed by default within therender function, which will register components such as CTreeView to
in CClientScript.
Required scripts for rendering output.
And renderPartial() does not automatically render and output client scripts by default. You need to specify parameters before outputting:
renderPartial($view,$data=null,$return=false,$processOutput=false)
Just specify processOutput as true.
For example, if you want to partially output CTreeView, use renderPartial for rendering. If you follow the default processOutput=false, the content will be output without client scripts
The output content is a normal ul list. There is no tree-shaped folding effect. After actively setting processOutput=true, all client scripts required by CTreeView will be output normally at the front of the list.
The following introduces several related functions to be used:
render, renderPartial will no longer be introduced
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; }
The above is quite useful in actual operation. For example, if you don’t want to use a large component, you can directly input the variables into the template, or you can input multiple variables into an array into the template.
Just require. If you have to use render(), use renderPartial()
For example:
1. Yii::app()->user->returnUrl = Yii::app()->getBaseUrl()."/step/show/id/1";
$this->redirect(Yii::app()->user->returnUrl);
2. $this->redirect(array('step/show','id'=> ;1));
3. $this->render('index',array('post'=>$questions));
4. $this->renderPartial('field_show', array('field'=>$field,'key'=>++$key,));