首页 > 代码库 > thinkphp分页时保持查询条件

thinkphp分页时保持查询条件

thinkphp 查询数据时需要分页显示时,会出现只有第1页是按查询条件查到的数据,而其他页面都恢复了,我们想要的结果却是:在翻页时,查询条件保持不变

原因是:在分页跳转的时候,没有将查询条件作为分页参数传递到下一页。原来翻页的时候,存储在REQUEST变量中的参数并未被传递到下一页,因为表单的 method = “post”,而点击进入下一页时,很明显form表单被重置了,所以打印REQUEST变量也是空的。

thinkphp RBAC的示例代码中给出了:

 
 
 
 
 
 
PHP
 
1
2
3
4
5
6
7
8
9
10
11
12
13
$p = new Page($count, $listRows);
//分页查询数据
$voList = $model->where($map)->order("`" . $order . "` " . $sort)->limit($p->firstRow . ‘,‘ . $p->listRows)->findAll();
 
//echo $model->getlastsql();
//分页跳转的时候保证查询条件(其实重点不在这里!)
foreach ($map as $key => $val) {
if (!is_array($val)) {
$p->parameter .= "$key=" . urlencode($val) . "&";
}
}
//分页显示
$page = $p->show();

 试过之后,发现虽然试图在URL参数中加入查询条件,但是显示的结果仍然如初,因为翻到第二页时,查询条件的表单数据已经丢失了。

查看ORG.page类,发现其parameter属性确实是由用户表单输入的查询条件和系统内定的分页参数p经过urlencode最后附加到页码跳转的链接URL上。尽管thinkphp官方说,会优先去POST,再去GET变量,但是结果却并非想象中那么美好。

在模版中,将查询条件的表单提交方式,由POST方式 改为 GET 方式 ,即:method = “get”,问题暂时解决了。

待续…

2013.11.27

今天有了一些新的想法。不知道这种方式好不好。

1、在使用了条件查询时,将查询条件发送到action,

2、action在调用view显示页面时,再把查询条件字段写到页面上。

3、重复1操作。

 

thinkphp