概述
前几天写项目 后台分页发现一个很坑的地方
因为是小白写的时候一开始都没写后台分页
等项目写的差不多的时候发现thinkphp后台自带的page类
会在你的路径后面加上 /p/1
例如
localhost/patrol/Home/statistics/statistics_warning/p/1
但是我写的都是相对路径 当我点击其他的页面的时候路径就会变成
localhost/patrol/Home/statistics/statistics_warning/statistics/statistics_repair
类似于这样
经过研究说是伪静态 的问题 可以根据重写 来从新定制page类的路径
来达到类似
statistics/statistics_warning_p_1
或者
statistics/statistics_warning?p=1
这样的写法来解决问题
好 我开始来码代码
找到thinkphp3.2 page页面
一般位置在thinkphp/library/think 里面 找到page.class.php
在第23行把
private $url = ''; //当前链接URL
改成
public $url = ''; //当前链接URL
在第70行 url方法里
return str_replace(urlencode('[PAGE]'), $page, $this->url);
改成
$pageUrl = str_replace(strtolower(urlencode('[PAGE]')), $page, $this->url);//开启URL不区分大小写时处理
return str_replace(urlencode('[PAGE]'), $page, $pageUrl);
在第80行
/* 生成URL */
$this->parameter[$this->p] = '[PAGE]';
$this->url = U(ACTION_NAME, $this->parameter);
改成
if(0 == $this->totalRows) return '';
if(empty($this->url)){
$this->parameter[$this->p] = '[PAGE]';
$this->url = U(ACTION_NAME, $this->parameter);
}
然后就去我们定制路径 或者定制路由
我们在分页方法里直接更改url他的写法
$p->url=__ROOT__.'/Home/'.$url.'?p='.urlencode('[PAGE]').'&'.$parameter;
这样写出来就是
/statistics/statistics_warning?p=1 这样的方式
urlencode(’[PAGE]’) 就是当前页数
也可以根据路由的方式完成
首先确认自己打开路由兼容
当打开以后
'URL_ROUTER_ON' => true, //开启路由
'URL_MODEL' => '2', //url访问模式为rewrite模式
'URL_ROUTE_RULES'=>array(
'/^warning/warning_management_p_(d+)$/' => 'warning/warning_management?p=:1',//分页
'/^my/(w+)$/'=>'Index/index?name=:1',
'/^my/(d{4})/(d{2})/(d{2})$/'=>'Index/day?year=:1&month=:2&day=:3',
),
下面就是正则路由的方式 同样匹配 不过这样每个页面都要写一条
不会的话查一下手册复习一下 路由的用法
然后就欧克 ,ok了!
以后有问题的话我在改进,先记录下来
最后
以上就是粗心野狼为你收集整理的thinkphp3.2 后台分页更改伪静态 路由 兼容url写法的全部内容,希望文章能够帮你解决thinkphp3.2 后台分页更改伪静态 路由 兼容url写法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复