YII主題的控制由CThemeManager和CTheme管理,CThemeManager在應(yīng)用初始化時(shí)作為核心組件注冊(cè),主題默認(rèn)路徑是app/themes/。
主題配置 由于主題組件在應(yīng)用初始化時(shí)注冊(cè),其配置以及很方面,比如在app/themes/下有一個(gè)custom1主題 在主配置文件中加入'theme'=>'custom1'鍵值對(duì),在主題注冊(cè)的時(shí)候會(huì)調(diào)用 CWebApplication::setTheme($value)初始化主題的名字。
獲取主題 主題的獲取從控制器渲染視圖說起,通過視action方法傳遞的視圖名稱獲取視圖文件的路徑
- CController::getViewFile()
- public function getViewFile($viewName)
- {
-
- if(($theme=Yii::app()->getTheme())!==null && ($viewFile=$theme->getViewFile($this,$viewName))!==false)
- return $viewFile;
- $moduleViewPath=$basePath=Yii::app()->getViewPath();
-
- if(($module=$this->getModule())!==null)
- $moduleViewPath=$module->getViewPath();
- return $this->resolveViewFile($viewName,$this->getViewPath(),$basePath,$moduleViewPath);
- }
- CTheme::etViewFile()
-
-
-
-
-
-
- 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);
- }
回到CController獲取具體視圖文件路徑,視圖名稱有三種特殊命名 1、以//開頭是相對(duì)于應(yīng)用級(jí)別的視圖路徑 2、以/開頭是相對(duì)于module基本的視圖路徑 3、以xx.xx是別名視圖
- public function resolveViewFile($viewName,$viewPath,$basePath,$moduleViewPath=null)
- {
- if(empty($viewName))
- return false;
-
- if($moduleViewPath===null)
- $moduleViewPath=$basePath;
-
- if(($renderer=Yii::app()->getViewRenderer())!==null)
- $extension=$renderer->fileExtension;
- else
- $extension='.php';
- if($viewName[0]==='/')
- {
- if(strncmp($viewName,'//',2)===0)
- $viewFile=$basePath.$viewName;
- else
- $viewFile=$moduleViewPath.$viewName;
- }
- else if(strpos($viewName,'.'))
- $viewFile=Yii::getPathOfAlias($viewName);
- else
- $viewFile=$viewPath.DIRECTORY_SEPARATOR.$viewName;
-
- if(is_file($viewFile.$extension))
- return Yii::app()->findLocalizedFile($viewFile.$extension);
- else if($extension!=='.php' && is_file($viewFile.'.php'))
- return Yii::app()->findLocalizedFile($viewFile.'.php');
- else
- return false;
- }
在視圖文件中,在對(duì)該主題在的樣式j(luò)s和圖片的引用的需要用到Y(jié)ii::app()- >theme->baseUrl來作為baseUrl。
|