tp3.2.3保持搜索条件的分页

时间:2022-10-27 12:43:05

一、背景

      之前用tp做顶部搜索,做完之后也没注意那么多。后来测试的时候才发现,点击分页的下一页,我们之前的搜索条件就没用了。。这就有点不合适了,因此开始踩坑。

      我这里用的是Post方式提交的搜索条件。查看开发手册,发现tp手册中提供了解决方案:

链接:https://www.kancloud.cn/manual/thinkphp/1875

tp3.2.3保持搜索条件的分页

      手册上写的是很清楚,但是在我这里还是行不通。可能是因为我用的是自定义分页类的原因吧。无奈之下改成了GET方式提交搜索条件。

二、步骤

1、首先贴出我的分页方法。这个方法是写在Common目录下的function.php中,作为公用的分页方法。

/**
 *
 * @param $count 要分页的总记录数
 * @param int $pagesize 每页查询条数
 * @param  $where  传递过来的查询条件
 * @return \Think\Page
 */
function getNewPage($count, $pagesize,$where) {
    $p = new Think\Page($count, $pagesize);
    $p->setConfig('header', '<li class="rows">共<b>%TOTAL_ROW%</b>条记录 第<b>%NOW_PAGE%</b>页/共<b>%TOTAL_PAGE%</b>页</li>');
    $p->setConfig('prev', '上一页');
    $p->setConfig('next', '下一页');
    $p->setConfig('last', '末页');
    $p->setConfig('first', '首页');
    $p->setConfig('theme', '%FIRST%%UP_PAGE%%LINK_PAGE%%DOWN_PAGE%%END%%HEADER%');
    $p->lastSuffix = false;//最后一页不显示为总页数
    return $p;

      这里不用tp自带分页的原因是,自带的分页实在太丑了。。有点不忍直视,所以就改了一下样式,分页方法还是一样的。

2、GET表单提交条件。

1)我之前做的搜索条件是POST方式提交的,链接如下:

http://blog.csdn.net/ljfphp/article/details/79117813

2)该用GET方法之后,只是获取参数的方式由 P O S T _GET,条件部分,我们还是根据条件组成了数组。

//$where即为搜索条件
  if($openid){
        $where['openid'] = ['EQ', $openid];
      }
      if($nickname){
        $where['nickname'] = ['EQ', $nickname];
      }

3)如果想要点击分页的其他页,保持我们的搜索条件,那我们就需要把这个搜索条件$where传入到分页方法中:

//传入$where
  $p = getpage($count,$page,$where);
//在分页方法中加上一段代码:
 $p = new Think\Page($count, $pagesize);
  foreach($where as $key=>$val) {
    $p->parameter  .=  "$key=".urlencode($val).'&';
}

      这里,我们相当于把搜索条件的数组传入到分页方法,然后循环拼接搜索条件中的条件。这样就能实现,我们点击分页的时候,会自动带上我们的搜索条件。

例如:
tp3.2.3保持搜索条件的分页

点击第二页,顶部的url会自动带上搜索条件。这样,分页就成功保持住了搜索条件了。

end