* @link http://www.yiiframework.com/ * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** * CContentDecorator decorates the content it encloses with the specified view. * * CContentDecorator is mostly used to implement nested layouts, i.e., a layout * is embedded within another layout. {@link CBaseController} defines a pair of * convenient methods to use CContentDecorator: *
 * $this->beginContent('path/to/view');
 * // ... content to be decorated
 * $this->endContent();
 * 
* * The property {@link view} specifies the name of the view that is used to * decorate the content. In the view, the content being decorated may be * accessed with variable $content. * * @author Qiang Xue * @package system.web.widgets * @since 1.0 */ class CContentDecorator extends COutputProcessor { /** * @var mixed the name of the view that will be used to decorate the captured content. * If this property is null (default value), the default layout will be used as * the decorative view. Note that if the current controller does not belong to * any module, the default layout refers to the application's {@link CWebApplication::layout default layout}; * If the controller belongs to a module, the default layout refers to the module's * {@link CWebModule::layout default layout}. */ public $view; /** * @var array the variables (name=>value) to be extracted and made available in the decorative view. */ public $data=array(); /** * Processes the captured output. * This method decorates the output with the specified {@link view}. * @param string $output the captured output to be processed */ public function processOutput($output) { $output=$this->decorate($output); parent::processOutput($output); } /** * Decorates the content by rendering a view and embedding the content in it. * The content being embedded can be accessed in the view using variable $content * The decorated content will be displayed directly. * @param string $content the content to be decorated * @return string the decorated content */ protected function decorate($content) { $owner=$this->getOwner(); if($this->view===null) $viewFile=Yii::app()->getController()->getLayoutFile(null); else $viewFile=$owner->getViewFile($this->view); if($viewFile!==false) { $data=$this->data; $data['content']=$content; return $owner->renderFile($viewFile,$data,true); } else return $content; } }