如何在分页时保持之前的查询条件,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])."®_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).'&';
}
}