You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.6 KiB
82 lines
2.6 KiB
12 years ago
|
<?php
|
||
|
/**
|
||
|
* CContentDecorator class file.
|
||
|
*
|
||
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||
|
* @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:
|
||
|
* <pre>
|
||
|
* $this->beginContent('path/to/view');
|
||
|
* // ... content to be decorated
|
||
|
* $this->endContent();
|
||
|
* </pre>
|
||
|
*
|
||
|
* 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 <code>$content</code>.
|
||
|
*
|
||
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||
|
* @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 <code>$content</code>
|
||
|
* 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;
|
||
|
}
|
||
|
}
|