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