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