141 lines
3.6 KiB
PHP
141 lines
3.6 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* CTheme 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/
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* 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>
|
||
|
* @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();
|
||
|
}
|
||
|
}
|
||
|
elseif($module!==null)
|
||
|
$moduleViewPath.='/'.$module->getId();
|
||
|
|
||
|
return $controller->resolveViewFile($layoutName,$moduleViewPath.'/layouts',$basePath,$moduleViewPath);
|
||
|
}
|
||
|
}
|