码迷,mamicode.com
首页 > 其他好文 > 详细

YII框架分析笔记12:主题管理

时间:2015-09-21 21:08:56      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

YII主题的控制由CThemeManager和CTheme管理,CThemeManager在应用初始化时作为核心组件注册,主题默认路径是app/themes/。


主题配置
由于主题组件在应用初始化时注册,其配置以及很方面,比如在app/themes/下有一个custom1主题
在主配置文件中加入‘theme‘=>‘custom1‘键值对,在主题注册的时候会调用 CWebApplication::setTheme($value)初始化主题的名字。


获取主题
主题的获取从控制器渲染视图说起,通过视action方法传递的视图名称获取视图文件的路径

  1. CController::getViewFile()  
  2. public function getViewFile($viewName)  
  3. {  
  4.    
  5.     if(($theme=Yii::app()->getTheme())!==null && ($viewFile=$theme->getViewFile($this,$viewName))!==false)  
  6.         return $viewFile;  
  7.     $moduleViewPath=$basePath=Yii::app()->getViewPath();  
  8.     
  9.     if(($module=$this->getModule())!==null)  
  10.         $moduleViewPath=$module->getViewPath();  
  11.     return $this->resolveViewFile($viewName,$this->getViewPath(),$basePath,$moduleViewPath);  
  12. }   
  1. CTheme::etViewFile()  
  2. /** 
  3.  * Finds the view file for the specified controller‘s view. 
  4.  * @param CController $controller the controller 
  5.  * @param string $viewName the view name 
  6.  * @return string the view file path. False if the file does not exist. 
  7.  */  
  8. public function getViewFile($controller,$viewName)  
  9. {  
  10.     $moduleViewPath=$this->getViewPath();  //获取视图目录路径,默认是app/themes/custom1/view  
  11.     if(($module=$controller->getModule())!==null)  
  12.         $moduleViewPath.=‘/‘.$module->getId(); //如果存在module,目录路径app/themes/custom1/view/moduleId  
  13.     return $controller->resolveViewFile($viewName,$this->getViewPath().‘/‘.$controller->getUniqueId(),$this->getViewPath(),$moduleViewPath);  
  14. }  

回到CController获取具体视图文件路径,视图名称有三种特殊命名
1、以//开头是相对于应用级别的视图路径
2、以/开头是相对于module基本的视图路径
3、以xx.xx是别名视图

  1. public function resolveViewFile($viewName,$viewPath,$basePath,$moduleViewPath=null)  
  2. {  
  3.     if(empty($viewName))  
  4.         return false;  
  5.   
  6.     if($moduleViewPath===null)  
  7.         $moduleViewPath=$basePath;  
  8.   
  9.     if(($renderer=Yii::app()->getViewRenderer())!==null)  
  10.         $extension=$renderer->fileExtension;  
  11.     else  
  12.         $extension=‘.php‘;  
  13.     if($viewName[0]===‘/‘)  
  14.     {  
  15.         if(strncmp($viewName,‘//‘,2)===0)  
  16.             $viewFile=$basePath.$viewName;  
  17.         else  
  18.             $viewFile=$moduleViewPath.$viewName;  
  19.     }  
  20.     else if(strpos($viewName,‘.‘))  
  21.         $viewFile=Yii::getPathOfAlias($viewName);  
  22.     else  
  23.         $viewFile=$viewPath.DIRECTORY_SEPARATOR.$viewName;  
  24.   
  25.     if(is_file($viewFile.$extension))  
  26.         return Yii::app()->findLocalizedFile($viewFile.$extension);  
  27.     else if($extension!==‘.php‘ && is_file($viewFile.‘.php‘))  
  28.         return Yii::app()->findLocalizedFile($viewFile.‘.php‘);  
  29.     else  
  30.         return false;  
  31. }  

在视图文件中,在对该主题在的样式js和图片的引用的需要用到Yii::app()- >theme->baseUrl来作为baseUrl。

YII框架分析笔记12:主题管理

标签:

原文地址:http://www.cnblogs.com/sunscheung/p/4827135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!