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.
		
		
		
		
			
				
					142 lines
				
				3.6 KiB
			
		
		
			
		
	
	
					142 lines
				
				3.6 KiB
			| 
								 
											14 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * CTheme class file.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @author Qiang Xue <qiang.xue@gmail.com>
							 | 
						||
| 
								 | 
							
								 * @link http://www.yiiframework.com/
							 | 
						||
| 
								 | 
							
								 * @copyright Copyright © 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$
							 | 
						||
| 
								 | 
							
								 * @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);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |