改写ThinkPHP的U方法使其路由后,直接生成路由后的URL及分页正常(3.2.3)版本

浏览:1994 发布日期:2015/08/01 分类:技术分享 关键字: U方法 路由
参照这里http://www.thinkphp.cn/topic/11644.html,其实就是不停的替换URL中的内容。这位大神改写的是3.1的方法,但是据说3.1支持在page实例化的时候传入一个URL项,我没有试,我用的3.2是不支持的,所以直接改写了U,而且,判断了入口文件及模块绑定。这个改法只适合带参数的路由,不带参数的在判断添加参数的后面再进行一次转换。

修改过程:
1、找到Think/Common/functions.php中的第981行,这里if(!empty($vars)) { // 添加参数
            foreach ($vars as $var => $val){
                if('' !== trim($val))   $url .= $depr . $var . $depr . urlencode($val);
            }
往下添加如下内容/*
            * tp开启路由之后下一页路由失效问题 分页类URL组装
            */
             //如果开启路由
            if(C('URL_ROUTER_ON')){      
                foreach (C('URL_ROUTE_RULES') as $zhaolg => $zlig){//遍历路由    
                    // 替换掉入口文件,url转换成小写
                    $url = str_replace(__APP__,'',$url);
                    $zlig = strtolower($zlig);
                    // 判断是否绑定了模块,然后从路由中找规则
                    $ismodule = empty($module) ? strstr('/'.$url,$zlig) : strstr('/'.MODULE_NAME.$url,$zlig);
                    if($ismodule){//如果网址中找到了路由规则
                        $lg = strstr($zhaolg,'/:');//分析规则 带参数?
                        if($lg){//如果规则带参数              
                            $tempzlg = str_replace('/:','',$lg);//取参数
                            //dump($tempzlg); 
                            if($tempzlg){
                                // 判断是否开启子域名
                                if(C('APP_SUB_DOMAIN_DEPLOY')){
                                    $zlgurl = str_replace($zlig,$zhaolg,'/'.MODULE_NAME.$url); //url替换为路由规则 
                                }else{
                                    $zlgurl = str_replace($zlig,$zhaolg,$url); //url替换为路由规则 
                                }                
                                //注 /s/:c/c/4/p/__PAGE__
                                //dump($zlgurl);
                                $url = str_replace($lg.'/'.$tempzlg,'',$zlgurl);//url替换路由规则参数
                            }  
                        }else{//分析规则 不带参数
                            if(C('APP_SUB_DOMAIN_DEPLOY')){
                                $url = str_replace($zlig,$zhaolg,'/'.MODULE_NAME.$url);//url替换为路由规则
                            }else{
                                $url = str_replace($zlig,$zhaolg,$url);//url替换为路由规则 
                            }          
                        }
                    }
                }
            }
            // 改写完
具体情况自己再根据项目做。
最佳答案
评论( 相关
后面还有条评论,点击查看>>