diff --git a/framework/base/View.php b/framework/base/View.php index 9f382c6..8b1f4ef 100644 --- a/framework/base/View.php +++ b/framework/base/View.php @@ -35,6 +35,10 @@ class View extends Component */ public $context; /** + * @var ViewContent + */ + public $content; + /** * @var mixed custom parameters that are shared among view templates. */ public $params; @@ -83,6 +87,11 @@ class View extends Component if (is_array($this->theme)) { $this->theme = Yii::createObject($this->theme); } + if (is_array($this->content)) { + $this->content = Yii::createObject($this->content); + } else { + $this->content = new ViewContent; + } } /** @@ -156,6 +165,7 @@ class View extends Component } else { $output = $this->renderPhpFile($viewFile, $params); } + $output = $this->content->populate($output); $this->afterRender($viewFile, $output); } diff --git a/framework/base/ViewContent.php b/framework/base/ViewContent.php new file mode 100644 index 0000000..265da84 --- /dev/null +++ b/framework/base/ViewContent.php @@ -0,0 +1,106 @@ + + * @since 2.0 + */ +class ViewContent extends Component +{ + const POS_HEAD = 1; + const POS_BEGIN = 2; + const POS_END = 3; + + public $packages; + + public $title; + public $metaTags; + public $linkTags; + public $css; + public $js; + public $cssFiles; + public $jsFiles; + + public function populate($content) + { + return $content; + } + + public function reset() + { + $this->title = null; + $this->metaTags = null; + $this->linkTags = null; + $this->css = null; + $this->js = null; + $this->cssFiles = null; + $this->jsFiles = null; + } + + public function getMetaTag($key) + { + return isset($this->metaTags[$key]) ? $this->metaTags[$key] : null; + } + + public function setMetaTag($key, $tag) + { + $this->metaTags[$key] = $tag; + } + + public function getLinkTag($key) + { + return isset($this->linkTags[$key]) ? $this->linkTags[$key] : null; + } + + public function setLinkTag($key, $tag) + { + $this->linkTags[$key] = $tag; + } + + public function getCss($key) + { + return isset($this->css[$key]) ? $this->css[$key]: null; + } + + public function setCss($key, $css) + { + $this->css[$key] = $css; + } + + public function getCssFile($key) + { + return isset($this->cssFiles[$key]) ? $this->cssFiles[$key]: null; + } + + public function setCssFile($key, $file) + { + $this->cssFiles[$key] = $file; + } + + public function getJs($key, $position = self::POS_END) + { + return isset($this->js[$position][$key]) ? $this->js[$position][$key] : null; + } + + public function setJs($key, $js, $position = self::POS_END) + { + $this->js[$position][$key] = $js; + } + + public function getJsFile($key, $position = self::POS_END) + { + return isset($this->jsFiles[$position][$key]) ? $this->jsFiles[$position][$key] : null; + } + + public function setJsFile($key, $file, $position = self::POS_END) + { + $this->jsFiles[$position][$key] = $file; + } + +} \ No newline at end of file