thinkphp分页搜索查询

本篇文章将为大家讲述thinkphp框架如何进行分页搜索查询

       相信很多人都会在网上搜索thinkphp如何分页搜索,并且当点击第二页的时候搜索条件保持不变,博主在整理,修改自己之前写的一个网站的时候也遇到过,也百度过,但其实很多的做法只是对一半,并全可以,下面我将给大家介绍如何简单的实现,下面这个方法自己测试过可以用,所以大家可以试试,也欢迎大家抽空访问我的另一个网站--汤圆快到碗里来

      我们分页搜索查询其实可以使用thinkphp自带的分页类就可以实现,只是我们在使用过程中必须注意,就是前端页面的条件传递必须是GET请求方法,如果是POST方式,那么将无法实现,这也是很多开发者往往代码是正确的,只是因为这一个问题而造成无法实现。

      首先是前端代码,我们先弄一个查询表单,大家根据自己需求,查询不同的条件,我这里是可以查询标题、状态、时间,其中表单的action地址这里不填,默认是当前地址,这个可以根据不同需求,写自己的地址,代码如下:

image.png

       下面我将介绍我的后端控制器代码,首先是接收条件的代码如下:

if ($_GET) {
   $title = I('get.title');
   $status = I('get.status');
   $start = strtotime(I('get.query_start_time'));
   $end = strtotime(I('get.query_end_time'));
   //标题
   if ($title != '') {
      $where['title'] = array('like', "%{$title}%");
   }
   //状态
   if ($status != '2') {
      $where['status'] = $status;
   }
   //时间
   if ($_GET['query_start_time'] && $_GET['query_end_time']) {
      $where['publish_time'] = array('BETWEEN', array($start, $end));
   } else if ($_GET['query_start_time']) {
      $where['publish_time'] = array('EGT', $start);
   } else if ($_GET['query_end_time']) {
      $where['publish_time'] = array('ELT', $end);
   }
}

       然后是开始执行条件查询代码,代码如下:

$articleList = M('article')->where($where)->order('id desc')->
    page($_GET['p'] . ',12')->select();
$count1 = M('article')->where($where)->count();
$Page = new \Think\Page1($count1, 12);// 实例化分页类 传入总记录数和每页显示的记录数
$show = $Page->show();                // 分页显示输出
$this->assign('page', $show);         // 赋值分页输出
$this->assign('articleList', $articleList);
$this->display();

       这样我们便完成了后端代码了,后端代码其实就是接收条件并组合成数组进行查询,然后将获取的结果返回前端就可以了,记住前端条件是用GET传递,后端接收条件同样也是用GET,这样便可以使我们在第二页的时候,条件依然不变。有时候你还想当跳转第二页的时候,查询的条件依然还存在前端页面的查询栏中,只要在相应的查询控件中的value值加入{:I('get.相应ID名')},例如我的是标题input控件,他的ID是title,那么代码如下:

image.png

这样就可以保持搜索条件依然显示在控件上,不同的ID,获取的ID值不同。

       以上就是我为大家讲解的thinkphp使用分页查询搜索,我这里的版本是3.2。

1条评论

  • 黎鸣 2019-07-29 11:09:40

    哇,这个真棒,刚好需要用到,一搜就找到这里,感谢博主的贡献

    回复

发表评论