您的位置:首页 > 编程语言 > PHP开发

THINKPHP分页时保持查询条件

2014-08-21 12:18 519 查看
http://www.bitpencil.com/archives/thinkphp-page-with-parameter.html

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

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

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

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操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: