|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Theme class file.
|
|
|
|
*
|
|
|
|
* @link http://www.yiiframework.com/
|
|
|
|
* @copyright Copyright © 2008-2012 Yii Software LLC
|
|
|
|
* @license http://www.yiiframework.com/license/
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace yii\base;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Theme represents an application theme.
|
|
|
|
*
|
|
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
|
|
* @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);
|
|
|
|
}
|
|
|
|
}
|