最近项目上面有一个带条件查询的分页列表,一开始form用的post,点击第二页就没有跳转成功,原因是分页是get请求,post数据链接到其他页面就会被清除。

解决办法:

1、form表单method=get

2、后台代码用I('get.parameterName')获取URL参数(查询条件)

3、修改thinkphp3.2.3的Page类:

第47行 改为$this->parameter  = empty($parameter) ? array_urlencode($_GET) : $parameter;

array_urlencode函数(对多维数组进行urlEncode,防止GET参数中文乱码)是全局公共函数,写在Common/Common/function.php里,

function array_urlencode($data){
$new_data = array();
foreach($data as $key => $val){
// 这里我对键也进行了urlencode
$new_data[urlencode($key)] = is_array($val) ? array_urlencode($val) : urlencode($val);
}
return $new_data;
}

至此完成了带条件查询的分页功能。

如果读者跟我的项目一样,要对get请求进行区分,可以在html页面的form表单加入input=hidden的区分条件,条件成立表示带查询条件的get,不成立则是普通get加载页面

给出后台代码:

public function definedTypeList(){
if(empty(I('get.isSearch'))){ //不是查询条件的get
$count = M('docDefinedType')->count("d_type_id");
$Page = new \Think\Page($count, 10);
$Page->lastSuffix = false;//最后一页不显示为总页数
$Page->setConfig('header','<li class="disabled hwh-page-info"><a>共<em>%TOTAL_ROW%</em>条 <em>%NOW_PAGE%</em>/%TOTAL_PAGE%页</a></li>');
$Page->setConfig('prev','上一页');
$Page->setConfig('next','下一页');
$Page->setConfig('last','末页');
$Page->setConfig('first','首页');
$Page->setConfig('theme','%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%');
$page_show = bootstrap_page_style($Page->show());//转bootstrap样式
$list = M('docDefinedType')->limit($Page->firstRow . ',' . $Page->listRows)
->order('doc_type desc,defined_type desc')->select();
$this->assign('definedTypeList', $list);
if ($count <= 10) {
$this->assign("page", '<b>共1页</b>');
} else {
$this->assign("page", $page_show);
}
$this->display();
}else{
// header("Content-type: text/html;charset=utf-8");
$typeCondition=$_GET['typeCondition'];
if(!empty($typeCondition)){
$map['defined_type']=array('like','%'.$typeCondition.'%');
}
$categoryCondition=$_GET['categoryCondition'];
if(!empty($categoryCondition)){
$map['doc_type']=array('like','%'.$categoryCondition.'%');
}
$count = M('docDefinedType')->where($map)->count("d_type_id");
$Page = new \Think\Page($count, 10);
$Page->lastSuffix = false;//最后一页不显示为总页数
$Page->setConfig('header','<li class="disabled hwh-page-info"><a>共<em>%TOTAL_ROW%</em>条 <em>%NOW_PAGE%</em>/%TOTAL_PAGE%页</a></li>');
$Page->setConfig('prev','上一页');
$Page->setConfig('next','下一页');
$Page->setConfig('last','末页');
$Page->setConfig('first','首页');
$Page->setConfig('theme','%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%');
// p($Page->parameter);
$page_show = bootstrap_page_style($Page->show()); $list = M('docDefinedType')->where($map)->limit($Page->firstRow . ',' . $Page->listRows)
->order('doc_type desc,defined_type desc')->select();
// p($list);
$this->assign('definedTypeList', $list);
if ($count <= 10) {
$this->assign("page", '<b>共1页</b>');
} else {
$this->assign("page", $page_show);
}
$searchArr['typeCondition']=$typeCondition;
$searchArr['categoryCondition']=$categoryCondition;
$this->assign('searchArr',$searchArr);
$this->display();
}
}

thinkphp分页+条件查询的更多相关文章

  1. Mybatis 的分页条件查询语句编写

    刚来到一家新公司, 翻看项目代码, 发现一位同事写的查询逻辑很好, 不用插件, 一个语句完成了分页条件查询. 而我之前一般都是在业务层对参数进行判断, 如果有条件,就调用条件查询的方法, 如果没有条件 ...

  2. thinkphp where()条件查询

    今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

  3. Thinkphp分页时查询条件保存方法

    web应用中经常要根据用户提交的查询条件进行过滤,再以列表方式显示在浏览器上.如果这种查询是多种条件的组合,并要进行分页显示,则如何在分页导航中保持查询条件,是必须解决的问题. 在Thinkphp中, ...

  4. JPA简单的分页条件查询

    1,service层代码: @Override public QrCodeRecordPaging getPage(String projectId, Integer pageNumber, Inte ...

  5. 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

    Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...

  6. thinkphp 带条件分页查询

    thinkphp 带条件分页查询:form表单传值时候,method='get'. 用 get 传值

  7. ThinkPHP中 按条件查询后列表显示

    最近在项目中遇到了需要根据下拉框的条件筛选出符合条件的数据,然后进行列表显示的问题. 在ThinkPHP中进行列表显示的传统过程:通过在后台控制器中查询出数据,然后通过$this->assign ...

  8. TP条件查询和分页查询

    一.条件查询 前端页面 <!doctype html> <html> <head> <meta charset="utf-8"> & ...

  9. jqGrid jqGrid分页参数+条件查询

    HTML <div class="row"> <div class="col-sm-20"> <form id="for ...

随机推荐

  1. C#结构体指针的定义及使用详解(intptr的用法)

    在解析C#结构体指针前,必须知道C#结构体是如何定义的.在c#中同样定义该结构体. C#结构体指针之C#结构体的定义: [StructLayout(LayoutKind.Sequential)] pu ...

  2. chrome - Vimium 插件超级方便快捷键

    Vimium插件作用 安装后,可以用定义好的快捷键操作浏览器,好用到爆粗口 下载地址 https://chrome.google.com/webstore/detail/vimium/dbepggeo ...

  3. VSS配置

    http://www.cnblogs.com/FreeDong/articles/2193151.html

  4. .net动态代理-EMIT,AOP实现

    动态代理实现原理: 通过动态基础目标类,重写目标虚方法,.net中实现手段-il Emit.Proxy项目源码,https://github.com/1448376744/Emit.Proxy 以下是 ...

  5. ASP.NET MVC 小牛之旅3:Routing——网址路由

    网址路由(Routing)在ASP.NET MVC中有两个主要用途,一个用途是匹配通过浏览器传来的HTTP请求,另一个用途则是响应适当的网址给浏览器. 3.1匹配通过浏览器传来的HTTP请求 首先我们 ...

  6. [CentOS7] 常用工具 之 差异备份工具 rdiff-backup

    差异备份: rdiff-backup ==> 用于累积差异备份,加上自己写的shell script,每日备份,效果更佳 先用yum search rdiff-backup看看是否yum源含有r ...

  7. [转] 出现( linker command failed with exit code 1)错误总结

    这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. ...

  8. python之垃圾回收机制

    一.前言 Python 是一门高级语言,使用起来类似于自然语言,开发的时候自然十分方便快捷,原因是Python在背后为我们默默做了很多事情,其中一件就是垃圾回收,来解决内存管理,内存泄漏的问题. 内存 ...

  9. IOS 关于tableview中cell的长按手势

    说明:虽然是tableview中cell的长按手势  但是手势是添加在tableview上的 UILongPressGestureRecognizer *longpress = [[UILongPre ...

  10. jmeter如何设置全局变量以及调用方法

    当遇到如跨线程组调用变量等情况,需要设置全局变量. 1.打开函数助手 输入需要的值然后点击生成按钮,或者直接使用${__setProperty(newuserid,${userid},)}的格式 设置 ...