* @since 2.0 */ class Theme extends ApplicationComponent { public $basePath; public $baseUrl; public function init() { if ($this->basePath !== null) { $this->basePath = \Yii::getAlias($this->basePath); } else { throw new Exception("Theme.basePath must be set."); } if ($this->baseUrl !== null) { $this->baseUrl = \Yii::getAlias($this->baseUrl); } else { throw new Exception("Theme.baseUrl must be set."); } } /** * @param Controller $controller * @return string */ public function getViewPath($controller = null) { $path = $this->basePath . DIRECTORY_SEPARATOR . 'views'; return $controller === null ? $path : $path . DIRECTORY_SEPARATOR . $controller->id; } public function getLayoutPath($module = null) { $path = $this->getViewPath($module); return $controller === null ? $path : $path . DIRECTORY_SEPARATOR . $controller->id; } public function getWidgetViewPath($widget) { } /** * @return string the path for controller views. Defaults to 'ThemeRoot/views'. */ public function getViewPath() { return $this->_basePath . DIRECTORY_SEPARATOR . 'views'; } /** * Finds the view file for the specified controller's view. * @param CController $controller the controller * @param string $viewName the view name * @return string the view file path. False if the file does not exist. */ public function getViewFile($controller, $viewName) { $moduleViewPath = $this->getViewPath(); if (($module = $controller->getModule()) !== null) { $moduleViewPath .= '/' . $module->getId(); } return $controller->resolveViewFile($viewName, $this->getViewPath() . '/' . $controller->getUniqueId(), $this->getViewPath(), $moduleViewPath); } /** * Finds the layout file for the specified controller's layout. * @param CController $controller the controller * @param string $layoutName the layout name * @return string the layout file path. False if the file does not exist. */ public function getLayoutFile($controller, $layoutName) { $moduleViewPath = $basePath = $this->getViewPath(); $module = $controller->getModule(); if (empty($layoutName)) { while ($module !== null) { if ($module->layout === false) return false; if (!empty($module->layout)) break; $module = $module->getParentModule(); } if ($module === null) $layoutName = Yii::app()->layout; else { $layoutName = $module->layout; $moduleViewPath .= '/' . $module->getId(); } } else if ($module !== null) $moduleViewPath .= '/' . $module->getId(); return $controller->resolveViewFile($layoutName, $moduleViewPath . '/layouts', $basePath, $moduleViewPath); } }