ThinkPHP分页时保持查询条件

如何在分页时保持之前的查询条件,tp手册给出了如下答案:

带入查询条件

如果是POST方式查询,如何确保分页之后能够保持原先的查询条件呢,我们可以给分页类传入参数,方法是给分页类的parameter属性赋值:

import('ORG.Util.Page');// 导入分页类
$mapcount = $User->where($map)->count();// 查询满足要求的总记录数
$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
//分页跳转的时候保证查询条件
foreach($map as $key=>$val) {
    $Page->parameter .= "$key=".urlencode($val).'&';
}
$show = $Page->show();// 分页显示输出

往往我们需要自己写sql语句,需要的是字符串的where,如果传入的数组where,那么需要先把这个where转换成数组,放入到我们的sql语句中。代码如下所示:

$where = "";
foreach($wheres as $k=>$v){
    $where.=" and ".$k." ";
    if(is_array($v)){
        $where2 = implode(" ",$v);
    }else{
        $where2 = " = $v";
    }
    $where.=$where2;
}

如果查询条件$map是一维数组,以上的确可以实现,但某些时候,我们使用了这种查询方式:

$where['g_name'] =array('like',"'%{$g_name}%'");

那么手册上的办法就不能满足了。 所以需要修改一下:

foreach($where as $key=>$val) {
    if(is_array($val)){
        if($val[0]=='between'){
            $Page->parameter   .=   "reg_st_date=".urlencode($val[1][0])."&reg_end_date=".urlencode($val[1][1])."&";
        }elseif($val[0]=='like'){
            $val = trim(trim($val[1],"'"),"%");
            $Page->parameter   .=   "$key=".urlencode($val).'&';
        }
    }else{
        $Page->parameter   .=   "$key=".urlencode($val).'&';
    }

}

发表评论

邮箱地址不会被公开。 必填项已用*标注