thinkphp3与thinkphp5实现搜索分页时保留搜索参数功能
2020-07-05 重庆LiSEO工作室
在页面中显示数据较多时需要使用分页功能,但是在分页的列表页中,一旦添加了搜索功能,就需要在处理分页数据库时,也需要保留搜索的参数。
通常在使用thinkphp3版本进行开发时,在搜索表单中的代码如下:
<form method="post" action=""> <input type="text" placeholder="请输入搜索关键字" name="keywords" value="" /> <button type="submit">搜索</button> </form>
如果thinkphp所渲染的模板中,表单中method="post",而action="",则在提交搜索请求后,thinkphp中的方法即使使用了$p=$p->parameter[$keywords],也无法让搜索分页保存搜索参数,所以,最简单有效方法是将当前表单代码作如下修改即可:
<form method="get" action="__CONTROLLER__/index"> <input type="text" placeholder="请输入搜索关键字" name="keywords" value="{:I('get.keywords')}" /> <button type="submit">搜索</button> </form>
1、将method="post"改成method="get";
2、在action=""改成action="__CONTROLLER__/index",__CONTROLLER__/index是当前搜索分页请求和处理分页的方法;
3、在input文本框中的value=""中添加{:I('get.keywords')},以显示搜索的参数;
4、如果提交方式必须使用post方式提交,可参数官方手册上的使用方法,其具体代码如下:
$count = $User->where($map)->count();// 查询满足要求的总记录数 $Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数 //分页跳转的时候保证查询条件 foreach($map as $key=>$val) { $Page->parameter[$key] = urlencode($val); } $show = $Page->show();// 分页显示输出
PS:本人在测试搜索时的示例地址如下:
http://你的的域名地址/index.php/Home/Post/index/keywords/搜索关键词/p/1.html
在thinkphp5版本实现分页功能并保留URL中参数,示例代码如下:
$postlist=Db::name('Post')->where($map)->paginate(10,false,['query'=> request()->param()]); //指定分页的记录,10即为每页分页的数量 $pages=$postlist->render(); //分页页码