开启二级域名后U方法生成URL地址,2.0版的修改版

浏览:639 发布日期:2010/10/28
- 普通 - 未处理
这段代码不是我写的,呵呵。是以前公司的一位同事修改的,在2.0TP刚出来的时候,他们就做了二级域名部署。今天我把这部分代码贴出来,共同研究研究呵呵。MyApp/conf 下的配置文件'APP_GROUP_LIST' => 'www,mail,shop,bbs',
'APP_MULTILEVELDOMAIN_DEPLOY_ON' => true,// 是否开启多级域名部署(目前暂时只支持二级域名)
'APP_MULTILEVELDOMAIN_DEPLOY' => array(
    'www' => array('','','',true,'www'),
    'mail' => array('','','',true,'mail'),
    'shop' => array('','','',true,'shop'),
    'bbs' => array('','','',true,'bbs'),
),
       
修改后的U方法:// URL组装 支持不同模式和路由
function U($url,$params=array(),$redirect=false,$suffix=true) {
    if(0===strpos($url,'/'))
        $url   =  substr($url,1);
    if(!strpos($url,'://')) // 没有指定项目名 使用当前项目名
        $url   =  APP_NAME.'://'.$url;
    if(stripos($url,'@?')) { // 给路由传递参数
        $url   =  str_replace('@?','@think?',$url);
    }elseif(stripos($url,'@')) { // 没有参数的路由
        $url   =  $url.MODULE_NAME;
    }
    // 分析URL地址
    $array   =  parse_url($url);
    $app      =  isset($array['scheme'])?   $array['scheme']  :APP_NAME;
    $route    =  isset($array['user'])?$array['user']:'';
    if(defined('GROUP_NAME') && strcasecmp(GROUP_NAME,C('DEFAULT_GROUP')))
        $group=  GROUP_NAME;
    if(isset($array['path'])) {
        $action  =  substr($array['path'],1);
        if(!isset($array['host'])) {
            // 没有指定模块名
            $module = MODULE_NAME;
        }else{// 指定模块
            if(strpos($array['host'],'-')) {
                list($group,$module) = explode('-',$array['host']);
            }else{
                $module = $array['host'];
            }
        }
    }else{ // 只指定操作
        $module = MODULE_NAME;
        $action   =  $array['host'];
    }
    if(isset($array['query'])) {
        parse_str($array['query'],$query);
        $params = array_merge($query,$params);
    }

    if(C('URL_DISPATCH_ON') && C('URL_MODEL')>0) {
        $depr = C('URL_PATHINFO_MODEL')==2?C('URL_PATHINFO_DEPR'):'/';
        $str    =   $depr;
        foreach ($params as $var=>$val)
            $str .= $var.$depr.$val.$depr;
        $str = substr($str,0,-1);
        $group   = isset($group)?$group.$depr:'';        if(C('APP_MULTILEVELDOMAIN_DEPLOY_ON') && C('APP_MULTILEVELDOMAIN_DEPLOY')){
            $domain = trim(strtolower($group),$depr);
            $deploys = (array)C('APP_MULTILEVELDOMAIN_DEPLOY');
            $deploys = isset($deploys[$domain]) ? $deploys[$domain] : false;
            if($deploys){
                $hostArr = explode('.',$_SERVER['HTTP_HOST']);
                array_shift($hostArr);
                $host = implode('.',$hostArr);
                $url = 'http://'.trim(strtolower($group),$depr).'.'.$host.str_replace(APP_NAME,$app,__APP__).'/';
            }else{
                $url = str_replace(APP_NAME,$app,__APP__).'/'.$group;
            }
        }else{
            $url = str_replace(APP_NAME,$app,__APP__).'/'.$group;
        }
        if(!empty($route)) {
            $url    .=   $route.$str;
        }else{
            $url    .=   $module.$depr.$action.$str;
        }
        if($suffix && C('URL_HTML_SUFFIX'))
            $url .= C('URL_HTML_SUFFIX');
    }else{
        $params =   http_build_query($params);
        if(isset($group)) {
            $url    =   str_replace(APP_NAME,$app,__APP__).'?'.C('VAR_GROUP').'='.$group.'&'.C('VAR_MODULE').'='.$module.'&'.C('VAR_ACTION').'='.$action.'&'.$params;
        }else{
            $url    =   str_replace(APP_NAME,$app,__APP__).'?'.C('VAR_MODULE').'='.$module.'&'.C('VAR_ACTION').'='.$action.'&'.$params;
        }
    }
    if($redirect)
        redirect($url);
    else
        return $url;
}
评论(
后面还有条评论,点击查看>>