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.
		
		
		
		
		
			
		
			
				
					
					
						
							115 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							115 lines
						
					
					
						
							2.8 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 | 
						|
{ | 
						|
	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'; | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * 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); | 
						|
	} | 
						|
}
 | 
						|
 |