改写ThinkPHP的U方法使其路由下分页正常
在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的U方法使其路由下分页正常
- Thinkphp事务操作实例(推荐)
- 微信小程序slider组件使用详解
- ES6中Class类的静态方法实例小结
- asp中获取当前页面的地址与参数的函数代码
- zf框架的Filter过滤器使用示例
- ES6 Iterator接口和for...of循环用法分析
- PHP json_decode函数详细解析
- PHP PDOStatement--errorInfo讲解
- BootStrap响应式导航条实例介绍
- MySql查询不区分大小写解决方案(两种)
- js实现n秒倒计时后才可以点击的效果
- Element-ui table中过滤条件变更表格内容的方法
- angular.element方法汇总
- vue的mixins属性详解
- vue-router重定向不刷新问题的解决