设为首页 收藏本站
查看: 1187|回复: 0

[经验分享] 多条件异步搜索+分页(PHP、 AJAX、ThinkPHP)

[复制链接]

尚未签到

发表于 2017-12-30 09:38:54 | 显示全部楼层 |阅读模式
  项目中遇到的多条件异步查询及数据分页问题,做了数次尝试,最终虽目的达到,但。。。。。希望能有更好的处理方式
  基于 tp框架
  1、html页面代码
  <div>
  <div>
  <span>省</span>
  <ul name="province_id" >
  <volist name="list">
  <if condition="$areaId eq $vo.areaId">
  <li value="{$vo.areaId}"color: #ff0000;">sendData(this,'province_id')"  >{$vo.areaName}</li>
  <else />
  <li value="{$vo.areaId}"color: #ff0000;">sendData(this,'province_id')"  >{$vo.areaName}</li>
  </if>
  </volist>
  </ul>
  </div>
  <div>
  <span>市</span>
  <ul name="city_id">
  </ul>
  </div>
  <div >
  <span>区</span>
  <ul name="area_id">
  </ul>
  </div>
  </div>
  <div><b>行业</b></div>
  <ul>
  <volist name="industry">
  <li value=""color: #ff0000;">sendData(this,'industry')" name="{$idfrom_home}" ><span >{$industry.name}</span></li>
  </volist>
  </ul>           
  </div>
  <div>
  <input type="text" name="" value=""  placeholder="搜索企业/商户名称"/>
  <a href="#"><input type="submit"  id="s-by-c"   value="" /></a>
  </div>
  <div>
  <volist name="company">
  <div >
  <div>
  <a href="{:U('Home/Company/detail?id='.$vo['id'])}">
  <img src="{$uploads}{$vo.logo}"/>
  <p>{$vo.name}</p>
  <span>{$vo.addreess}</span>
  <img src="{$home_img}qiyezongmu_03.png"/><span>{$vo.linkman}</span>
  <img src="{$home_img}qiyezongmu2_06.png"/><span>{$vo.linktel}</span>
  <img src="{$home_img}qiyezongmu2_03.png"/><span> {$vo.qqnum}</span>
  </a>
  </div>
  <div>
  <h3>公司主营</h3>
  <p>{$vo.des}</p>
  </div>
  </div>
  </volist>
  </div>
  <div>
  <if condition="$arr['count'] neq 0 ">
  <span>共<b>{$arr.count}</b>条记录,{$arr.p}/{$arr.Page}页</span>
  {$arr.show}
  <else />
  <center><b>暂无数据</b></center>
  </if>
  </div>
  2、jquery & ajax
  <script type="text/javascript">
  /*
  *区域(点击省获取区,点击区获取县)
  */
  function sendData(data,type){
  var data1=data.value;
  var name=$(data).attr('name');
  var companyname=$("#companyname").val();
  var data2 =$(data).parent().attr("id");
  var aa = $(data).text();
  $(data).addClass('selectPublicA').siblings().removeClass()
  /*ajax post提交返回区域列表 */
  $.ajax({
  url:"{:U('Home/Company/ajaxarea')}",
  data:{data:data1,type:type},
  type:"post",
  dataType:"json",
  success:function(msg){
  console.log(msg)
  if(type == 'province_id'){
  var html ='';
  $('#city_id').empty();
  $('#area_id').empty();
  for(var i=0;i<msg.length;i++){
  html += "<li value='"+msg.areaId+"'>
  }
  $(html).appendTo($("#city_id"));
  }else if(type == 'city_id'){
  $("#area_id").parent().css("display","block");
  var html ='';
  $('#area_id').empty();
  for(var i=0;i<msg.length;i++){
  html += "<li value='"+msg.areaId+"'>
  }
  $(html).appendTo($("#area_id"));
  }
  }
  })
  $.ajax({
  url:"{:U('Home/Company/index')}",
  data:{data:data1,type:type,name:name,companyname:companyname},
  type:"post",
  dataType:"json",
  success:function(msg){
  console.log(msg)
  var html="";
  var company=msg.rows;
  var url=msg.url;
  $('#page').empty();
  $("#companylist").empty();
  if(company != null){
  for(var i=0;i<company.length;i++){
  html += "<div>
  html += "<div>
  html += "<span>
  html += "<img src='{$home_img}qiyezongmu_03.png'>
  html += "<img src='{$home_img}qiyezongmu2_06.png'>
  html += "<img src='{$home_img}qiyezongmu2_03.png'>
  html += "<div>
  }
  }
  $(html).appendTo("#companylist");
  var htmlpage="<span>
  $(htmlpage).appendTo($("#page"));
  }
  })
  }
  </script>
  3、PHP 页面
  public function index(){
  $p = I('request.p');//获取点击分页的页数
  $paging  = $p<1?1:$p;
  //==============================接收AJAX/GET传参===============//
  $areaId=I('request.data');
  $industryId=I('request.name');
  $type=I('request.type');
  $companyname=I('request.companyname');
  //==============================接收AJAX/GET传参===============//
  //==============================查询条件=====================//
  $map = array('data' => $areaId,'type'=>$type,'name'=>$industryId,'companyname'=>$companyname);
  $order='';
  if(IS_AJAX){
  if($areaId>0){//若点击省市区  该条件写入session
  $_SESSION['areaId']=$areaId;
  $_SESSION['type']=$type;
  }
  if($industryId >0){//若点击行业 该条件写入session
  $_SESSION['industryId']=$industryId;
  }
  if($type == 'industry'){//若点击行业 调用session地区条件
  $areaId=$_SESSION['areaId'];
  $type=$_SESSION['type'];
  }
  if($type == 'companyname'){//若输入企业名查询 调用session 地区、行业条件
  $areaId=$_SESSION['areaId'];
  $industryId=$_SESSION['industryId'];
  $type=$_SESSION['type'];
  }
  $where= $this->get_where($areaId,$type,$industryId,$companyname);
  }else{
  //刷新页面时清除session中条件
  $_SESSION['areaId']="";
  $_SESSION['type']='';
  $_SESSION['industryId']='';
  $where = 'ischeck = 1';
  $where .=" AND ".$this->get_where($areaId,$type,$industryId,$goodsname);
  }
  //==============================查询条件=====================//
  //==============================查询数据=====================//
  $list =  D('Areas','Api')->getareas(100,1,'*','`parentId`=0');//所有地区列表
  $industry = D('Industry','Api')->getindustry(1000,1,'*','`status`=1 AND `isdelete`=1');//行业信息
  $arr=$this->getData_page('Company',3,'*',$where,$order,$map);
  //==============================查询数据=====================//
  $arr['p']=$paging;
  $company=$arr['rows'];
  if(IS_AJAX){
  echo json_encode($arr);
  }else{
  $this->assign('areaId',$areaId);
  $this->assign('industryId',$industryId);
  $this->assign('company',$company);
  $this->assign('arr',$arr);
  $this->assign('list',$list['tag']);
  $this->assign('industry',$industry['tag']);//需求列表
  $this->display();
  }
  }
  /*
  * ajax区域联动
  */
  public function ajaxarea(){
  $data['parentId']=$_POST['data'];
  if($_POST['type'] == 'province_id'){
  $list =D('Areas')->getarea($data);
  echo json_encode($list);
  }else if($_POST['type'] == 'city_id'){
  $list =D('Areas')->getarea($data);
  echo json_encode($list);
  }
  }
  /**
  *查询条件处理函数
  */
  public function get_where($areaId='',$type='',$industryId='',$companyname=''){
  $where = "1=1";//初始化where变量
  if ( $areaId > 0){
  $where .=" AND {$type}={$areaId}";
  }
  if ($industryId >0){
  $where .= " AND industry_id={$industryId}";
  }
  if ('' != $companyname){
  $where .=" AND `name` LIKE '%{$companyname}%'";
  }
  return $where;
  }
  /**
  *查询分页数据
  *$model 模型名也可视为数据表名
  */
  public function getData_page($model,$num='',$field='',$where='',$order ='',$map=''){
  $Model =M($model);
  $num  = ($num != '') ? $num : '10';
  $field  = ($field != '') ? $field : '*';
  if (!empty($field)){
  $Model->field($field);
  } else {
  $Model->field('*');
  }
  if (!empty($where)){
  $Model->where($where);
  }
  if (!empty($order)){
  $Model->order($order);
  }else{
  unset($order);
  }
  $count =$Model->where($where)->count();
  if (!empty($field)){
  $Model->field($field);
  } else {
  $Model->field('*');
  }
  if (!empty($where)){
  $Model->where($where);
  }
  if (!empty($order)){
  $Model->order($order);
  }
  $Page = new \Think\Page($count,$num);
  $Page->setConfig('prev','上一页');
  $Page->setConfig('next','下一页');
  $Page->setConfig("last",'尾页');
  $Page->setConfig('first','首页');
  $Page->rollPage = '5';
  //TP分页方法 $show 中url 拼接条件参数  点击分页条 除了传P 也会传查询条件参数
  foreach($map as $key=>$val) {
  $Page->parameter[$key]   =   urlencode($val);
  }
  $show = $Page->show();
  $offset = $Page->firstRow.','.$Page->listRows;
  $Model->limit($offset);
  $rows = $Model->select();
  $pagetotal =ceil($Page->totalRows/$num);
  $pagetotal<1 ? 1:$pagetotal;
  $arr =array('count'=>"$count",'Page'=>"$pagetotal",'show'=>"$show",'rows'=>$rows);
  return $arr;
  }
  总结:ajax获取条件参数提交给 php,php分情况存SESSION,以保证下个条件查询时拥有之前的条件;分页部分利用tp自带分页查询,在此基础上 将ajax提交的参数拼接到每次点击分页后的URL 再通过get获取即可实现异步查询后的数据分页

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429599-1-1.html 上篇帖子: 使用PHP+Swoole实现的网页即时聊天工具:PHPWebIM 下篇帖子: api 接口开发理论 在php中调用接口以及编写接口
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表