一个简单的应用场景。现在需要在后台对用户产品数据进行搜索,可以对产品名称使用模糊检索,也可以使用产品类别进行分类搜索。因为搜索条件是两个表单项,所以简单了区分搜索条件,增加一个radio字段用来判断用户输入的是什么数据,从而执行不同的sql语句。
假定radio字段为way,产品名称为product_name,产品类别为为type_id。设定way等于1执行产品名称模糊查询。否则执行类别查询。用变量$data接收表单数据$data=input('param.');
。如果paginate方法只使用每页几条的单一参数,代码如下:
通过两个查询,可以分别按要求查出所需数据。但是问题出现了,当点击页码翻页时候,程序报错,提示未定义数组索引: way。地址栏信息只有默认的翻页参数?page=2
。
其实原因很简单,就是当翻页的时候,因为通过post接收的way参数丢失了。thinkPHP官方为paginate方法提供了额外的query参数,用来实现翻页地址参数保留。
thinkPHP手册提供的所有参数:
主要的分页参数如下: | 参数 |
---|---|
list_rows | 每页数量 |
page | 当前页 |
path | url路径 |
query | url额外参数 |
fragment | url锚点 |
var_page | 分页变量 |
type | 分页类名 |
手册说明并不是很详细,看paginate类源码可以看到query参数支持数组。具体使用直接贴代码
通过添加query参数后,再次点击页码翻页,就不会报错了,再看地址栏就会多出参数way。当然还有其它方法可以解决这个额外参数的问题,只是个人觉得query参数是最方便的了。