summaryrefslogtreecommitdiff
path: root/framework/web/CTheme.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/web/CTheme.php')
-rw-r--r--framework/web/CTheme.php141
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 &copy; 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);
+ }
+}