搜索
系统检测到您的用户名不符合规范:

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

浏览:2037 发布日期: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替换为路由规则
}
}
}
}
}
// 改写完
具体情况自己再根据项目做。
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
李潇喃
积分:690 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /