改写ThinkPHP的U方法使其路由下分页正常

网络编程 2025-03-24 12:24www.168986.cn编程入门

在ThinkPHP 3.1.3版本中,启用路由功能后,分页地址往往无法正确匹配路由地址,这是一个广泛存在的问题。在版本的ThinkPHP中,这一问题仍未得到修复。在此,我们采用olcms的修改方案来解决这一问题,特别感谢phper jack对此做出的贡献。我们需要修改的是ThinkPHP的functions.php中的U方法,具体在大约第287行。

原本的代码是这样的:

```php

if(!empty($vars)) {

// 添加参数

foreach ($vars as $var => $val){

if('' !== trim($val))

$url .= $depr . $var . $depr . urlencode($val);

}

```

我们在其后加入以下代码来解决路由下的分页问题:

```php

// 针对开启路由后的ThinkPHP分页类URL组装问题

if(C('URL_ROUTER_ON')){

foreach (C('URL_ROUTE_RULES') as $rule => $value){ //遍历所有路由规则

if(strstr(GROUP_NAME.$url.'/'.$value)){ //在中查找匹配的路由规则

$rulePart = strstr($rule,'/:'); //分析规则,看是否带有参数

if($rulePart){ //如果规则带参数

$tempValue = str_replace('/:','',$rulePart); //提取参数部分

if($tempValue){

if(C('APP_SUB_DOMAIN_DEPLOY')){ //如果开启了子域名部署

$newUrl = str_replace($value,$rule,GROUP_NAME.$url.'/'.$value); //将路由规则替换到URL中

}else{

$newUrl = str_replace($value,$rule,$url); //将路由规则替换到URL中

}

//注意,例如:/s/:c/c/4/p/__PAGE__ 这样的格式

$url = str_replace($rulePart.'/'.$tempValue,'',$newUrl); //从新的URL中移除路由参数部分

}

}else{//分析规则,如果不带参数

if(C('APP_SUB_DOMAIN_DEPLOY')){ //如果开启了子域名部署

$url = str_replace($value,$rule,GROUP_NAME.$url.'/'.$value); //将路由规则替换到URL中原有的部分

}else{

$url = str_replace($value,$rule,$url); //将路由规则替换到URL中原有的部分

}

}

}

}

}

```

至此,我们成功解决了ThinkPHP在启用路由后分页链接不正确的问题。感谢大家的阅读,希望这个解决方案能够帮助到有需要的朋友。如果有任何疑问或需要进一步讨论的地方,请随时与我联系。让我们共同学习,共同进步!

上一篇:Thinkphp事务操作实例(推荐) 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by