[email protected]   15826058953
B2B外贸网站建设与运营,WEB服务器运维,始于2016。

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();    //分页页码