我们做一个多条件筛选功能
原理就是sql参数拼接
思路:前端传递选择的数据到ajax,ajax传递给后端,后端返回数据,渲染界面
1、前端界面渲染选项
<dl class="xuan clearfix"> <dt>风格</dt> <dd class="ddOn"> <a href="javascript:;" data-name="0">全部</a> </dd> {volist name="casefg" id="vo"} <dd><a href="javascript:;" data-name="{$vo.id}" >{$vo.id}{$vo.fgmc}</a></dd> {/volist} </dl>
这里多个选项,自行输出,至少2个以上才叫多条件筛选
2、获取数据
<script type="text/javascript"> var lis=$('.xuan'); $(lis).find('a').click(function(){ $(this).parent().addClass('ddOn').siblings().removeClass('ddOn'); var fg,kj,hx,mj; fg=$('.xuan').eq(0).find('.ddOn a').attr('data-name'); kj=$('.xuan').eq(1).find('.ddOn a').attr('data-name'); hx=$('.xuan').eq(2).find('.ddOn a').attr('data-name'); mj=$('.xuan').eq(3).find('.ddOn a').attr('data-name'); console.log("fg----"+fg) console.log("kj----"+kj) console.log("hx----"+hx) console.log("mj----"+mj) $.ajax({ method:"GET", url:"{:url('index/cases/index')}", data:"kj="+kj+"&hx="+hx+"&mj="+mj+"&fg="+fg, success:function(info){ $('.case-anli').html($(info).find('.case-anli').html()); }, error: function (XMLHttpRequest, textStatus, errorThrown) { // 状态码 console.log(XMLHttpRequest.status); // 状态 console.log(XMLHttpRequest.readyState); // 错误信息 console.log(textStatus); } }); return false; }); <script>
3、传递给后端
if(request()->isGet()){ // 默认获取全部 $kjid=input('get.kj/d') ? input('get.kj/d'):0; $mjid=input('get.mj/d') ? input('get.mj/d'):0; $hxid=input('get.hx/d') ? input('get.hx/d'):0; $fgid=input('get.fg/d') ? input('get.fg/d'):0; // 如果不点击 获取全部 if($kjid == 0 && $mjid == 0 && $hxid == 0 && $fgid == 0 ){ $caselst = Db::name('case') ->alias('c') ->join('fg f','c.fgid = f.id') ->join('hx h','c.hxid = h.id') ->join('team t','c.sjsid = t.id') ->field('c.id,c.img,c.title,c.zj,c.msg,c.fwmj,c.tj,f.fgmc,h.hxmc,t.title as tname,t.img as timg') ->order('c.sort asc') ->where('c.tj',1) ->paginate(2,false,['query' => request()->param()]); }else{ //如果只选择了一部分数据 if($kjid == 0 || $mjid == 0 || $hxid == 0 || $fgid ==0){ if($kjid != 0){ $condition['kjid'] = $kjid; } if($mjid != 0){ $condition['mjid'] = $mjid; } if($hxid != 0){ $condition['hxid'] = $hxid; } if($fgid != 0){ $condition['fgid'] = $fgid; } $caselst = Db::name('case') ->alias('c') ->join('fg f','c.fgid = f.id') ->join('hx h','c.hxid = h.id') ->join('team t','c.sjsid = t.id') ->field('c.id,c.img,c.title,c.zj,c.msg,c.fwmj,c.tj,f.fgmc,h.hxmc,t.title as tname,t.img as timg') ->order('c.sort asc') ->where($condition) ->where('c.tj',1) ->paginate(1,false,['query' => request()->param()]); }else{ $condition['kjid'] = $kjid; $condition['mjid'] = $mjid; $condition['hxid'] = $hxid; $condition['fgid'] = $fgid; $caselst = Db::name('case') ->alias('c') ->join('fg f','c.fgid = f.id') ->join('hx h','c.hxid = h.id') ->join('team t','c.sjsid = t.id') ->field('c.id,c.img,c.title,c.zj,c.msg,c.fwmj,c.tj,f.fgmc,h.hxmc,t.title as tname,t.img as timg') ->order('c.sort asc') ->where($condition) ->where('c.tj',1) ->paginate(1,false,['query' => request()->param()]); } } $this->assign('caselst',$caselst); } return view();
4、前端界面渲染
$('.case-anli').html($(info).find('.case-anli').html());
注意 : 这里这句代码包含输出 一定要注意 外层必须要包含一个标签。
这里我没包含一个外标签 弄了一天不知道原因。一定要注意。
<div class="team-anli case-anli "> <div class="caselst clearfix"> {volist name="caselst" id ="vo"} <a href="{:url('cases/shows',['id'=>$vo.id])}"> <div class="anli-img"> <img src="__UPLOADS__/{$vo.img}" alt="{$vo.title}"> <div class="case-up"> <img src="__INDEX__/images/caseup_03.png" alt=""> </div> </div> <div class="touxiang"> <img src="__UPLOADS__/team/{$vo.timg}" alt="本装饰案例设计:{$vo.tname}"> </div> <h5>[{$vo.fgmc}] {$vo.title}</h5> <p>设计师 — <span>{$vo.tname}</span></p> <h6> <i><img src="__INDEX__/images/qiaoh_03.png" alt=""><span>210</span></i> </h6> </a> {/volist} </div> <div class="page"> {$caselst|raw} </div> </div>
5、ajax分页:
$(document).on('click','.pagination li a',function(){ var pageObj = this; var mIndex=$(this).index(); var get_url = pageObj.href; $.ajax({ type:"GET", url:get_url, success:function(info){ $(".case-anli").html($(info).find('.case-anli').html()); } }); return false; })
注意控制器代码中:
paginate(1,false,['query' => request()->param()]);
['query' => request()->param()],有多少个参数传递都会自动给你增加上
https://blog.csdn.net/haibo0668/article/details/78021550