diff options
Diffstat (limited to 'framework/web/CTheme.php')
| -rw-r--r-- | framework/web/CTheme.php | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/framework/web/CTheme.php b/framework/web/CTheme.php new file mode 100644 index 0000000..5bf3520 --- /dev/null +++ b/framework/web/CTheme.php @@ -0,0 +1,141 @@ +<?php +/** + * CTheme class file. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @link http://www.yiiframework.com/ + * @copyright Copyright © 2008-2011 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CTheme represents an application theme. + * + * @property string $name Theme name. + * @property string $baseUrl The relative URL to the theme folder (without ending slash). + * @property string $basePath The file path to the theme folder. + * @property string $viewPath The path for controller views. Defaults to 'ThemeRoot/views'. + * @property string $systemViewPath The path for system views. Defaults to 'ThemeRoot/views/system'. + * @property string $skinPath The path for widget skins. Defaults to 'ThemeRoot/views/skins'. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Id: CTheme.php 3426 2011-10-25 00:01:09Z alexander.makarow $ + * @package system.web + * @since 1.0 + */ +class CTheme extends CComponent +{ + private $_name; + private $_basePath; + private $_baseUrl; + + /** + * Constructor. + * @param string $name name of the theme + * @param string $basePath base theme path + * @param string $baseUrl base theme URL + */ + public function __construct($name,$basePath,$baseUrl) + { + $this->_name=$name; + $this->_baseUrl=$baseUrl; + $this->_basePath=$basePath; + } + + /** + * @return string theme name + */ + public function getName() + { + return $this->_name; + } + + /** + * @return string the relative URL to the theme folder (without ending slash) + */ + public function getBaseUrl() + { + return $this->_baseUrl; + } + + /** + * @return string the file path to the theme folder + */ + public function getBasePath() + { + return $this->_basePath; + } + + /** + * @return string the path for controller views. Defaults to 'ThemeRoot/views'. + */ + public function getViewPath() + { + return $this->_basePath.DIRECTORY_SEPARATOR.'views'; + } + + /** + * @return string the path for system views. Defaults to 'ThemeRoot/views/system'. + */ + public function getSystemViewPath() + { + return $this->getViewPath().DIRECTORY_SEPARATOR.'system'; + } + + /** + * @return string the path for widget skins. Defaults to 'ThemeRoot/views/skins'. + * @since 1.1 + */ + public function getSkinPath() + { + return $this->getViewPath().DIRECTORY_SEPARATOR.'skins'; + } + + /** + * 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); + } +} |
