You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.9 KiB
112 lines
2.9 KiB
<?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); |
|
} |
|
}
|
|
|