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


    web应用中经常要根据用户提交的查询条件进行过滤,再以列表方式显示在浏览器上.如果这种查询是多种条件的组合,并要进行分页显示,则如何在分页导航中保持查询条件,是必须解决的问题.
    在Thinkphp中, 已有分页类"ORG.Util.Page",并且可以用$page->parameter保存查询参数, 但可能是受示例程序的影响,很多tper纠结于$page->parameter不能保存一些复杂条件,并自行开发出一些很复杂的程序解决这个问题. 其实只要用好$page->parameter,只需几行代码就能解决.
    先考察一下用户提交查询条件的过程: 一般情况下,会给用户提供一个form,让用户设定各种查询过滤条件,然后用户提交这个form,提交可以是传统的POST,也可以是Ajax,这个无所谓. 服务器收到用户提交的查询请求后, 先得到$_POST数据,再由此转换成查询语句中的$map,然后通过模型的where($map)语句获取符合条件的记录总数及当前分页记录集合,返回给客户端显示. $_POST数据是简洁明晰的,而$map则跟数据库的表/字段相关,有时很复杂,比如含有二维数组.
    由上面分析可知, 只要在$page->parameter保存$_POST过来的数据,就完全保存了用户设定的查询条件. 因为$_POST是一个关联数组, 我把它转换成json字符串,就可以传递给$page->parameter了, 因此有了下面代码:
                    import("ORG.Util.Page");
    	 	
    	 	if (!empty($_GET['filter'])) {
                                //如果有GET进来的filter数据,就说明是后台在分页时候保存有用户查询条件
    			$filter = json_decode($_GET['filter'],true);
    		}else if (!empty($_POST)) {
                               //如果没有GET的filter数据,但有POST数据,说明是用户直接提交了查询条件
    			$filter = $_POST;
    		} else {
    			$filter = null;
    		}
    	 	$map = $this->getFilterMap($filter);    //这个是把原始的$_POST数据转换成查询语句中的$map条件
    
    	 	$count = $model->where($map)->count();
    	 	$page = new Page($count,C('PAGESIZE'));
    	 	$page->parameter ='filter='. urlencode(json_encode($filter)); // 把查询条件转成json格式
    	 	$show = $page->show();
    	 	$this->assign('page',$show);



    只增加了6行代码,就完全实现预期功能. 而且前端不用做任何改变

  • 相关阅读:
    java进程占用CPU高的问题
    上下文切换的案例以及CPU使用率
    百度地图sdk问题 error inflating class com.baidu.mapapi.map.mapview
    Android APK反编译
    Binary XML file line #17<vector> tag requires viewportWidth > 0
    用代码实现签名
    百度地图出现UnsatisfiedLinkError: Native method not found: com.baidu...
    INSTALL_FAILED_INVALID_APK
    Android package属性、package name和Application ID三者的联系及区别
    Android使用百度定位API时获取的地址信息为null
  • 原文地址:https://www.cnblogs.com/riskyer/p/3236799.html
Copyright © 2020-2023  润新知