T方法优化

jerry thinkphp 2015年11月19日 收藏
优化ThinkPHP的T方法
ThinkPHP的目录管理有些问题。
当我设置了独立的模板目录以后模板目录会变成
模板目录/模块名称/模板主题/模板路径
然而很多CMS为了方便主题管理都是
模板目录/模板主题/模块名称/模板路径
这样的目录模式
所以改了下内核T方法
  1. /**
  2.  * 获取模版文件 格式 资源://模块@主题/控制器/操作
  3.  * @param string $template 模版资源地址
  4.  * @param string $layer 视图层(目录)名称
  5.  * @return string
  6.  */
  7. function T($template='',$layer=''){
  8.     // 解析模版资源地址
  9.     if(false === strpos($template,'://')){
  10.         $template   =   'http://'.str_replace(':', '/',$template);
  11.     }
  12.     $info   =   parse_url($template);
  13.     $file   =   $info['host'].(isset($info['path'])?$info['path']:'');
  14.     $module =   isset($info['user'])?$info['user'].'/':MODULE_NAME.'/';
  15.     $extend =   $info['scheme'];
  16.     $layer  =   $layer?$layer:C('DEFAULT_V_LAYER');
  17.     // 获取主题
  18.     $theme  =   substr_count($file,'/')<2 ? C('DEFAULT_THEME') : '';
  19.     // 获取当前主题的模版路径
  20.     $auto   =   C('AUTOLOAD_NAMESPACE');
  21.     if($auto && isset($auto[$extend])){ // 扩展资源
  22.         $baseUrl    =   $auto[$extend].$module.$layer.'/';
  23.     }elseif(C('VIEW_PATH')){ 
  24.         // 改变模块视图目录
  25.         $baseUrl    =   C('VIEW_PATH').($theme?$theme.'/':'');
  26.     }elseif(defined('TMPL_PATH')){ 
  27.         // 指定全局视图目录
  28.         $baseUrl    =   TMPL_PATH.($theme?$theme.'/':'').$module;
  29.     }else{
  30.         $baseUrl    =   APP_PATH.($theme?$theme.'/':'').$module.$layer.'/';
  31.     }
  32.     // 分析模板文件规则
  33.     $depr   =   C('TMPL_FILE_DEPR');
  34.     if('' == $file) {
  35.         // 如果模板文件名为空 按照默认规则定位
  36.         $file = CONTROLLER_NAME . $depr . ACTION_NAME;
  37.     }elseif(false === strpos($file, '/')){
  38.         $file = CONTROLLER_NAME . $depr . $file;
  39.     }elseif('/' != $depr){
  40.         $file   =   substr_count($file,'/')>1 ? substr_replace($file,$depr,strrpos($file,'/'),1) : str_replace('/', $depr, $file);
  41.     }
  42.     return $baseUrl.$file.C('TMPL_TEMPLATE_SUFFIX');
  43. }