基于thinkphp美团网的组合多条件筛选

3121

//配置路由规则
'URL_MODEL' => 2, // 2 (REWRITE 模式);
'URL_ROUTER_ON' => true,
'URL_ROUTE_RULES' => array(
'/^f_(\d+)_(\d+)_((\d+)-(\d+))$/' => 'Index/Index/index?cid=:1&lid=:2&price=:3'
)

Class IndexAction extends CommonAction{


        Public function index(){

            $cid = isset($_GET['cid'])?(int)$_GET['cid'] : 0;

            $lid = isset($_GET['lid'])?(int)$_GET['lid'] : 0;

            $price = isset($_GET['price'])?$_GET['price'] : '0-0'; 

            //dump($_GET);die;

            $this->getLocality($cid,$lid,$price);

            $this->getCate($cid,$lid,$price);

            $this->getPrice($cid,$lid,$price);

            $this->display();

        }


        //读取分类

        Private function getCate($cid,$lid,$price){

            $allCate = $this->getCateSon();

            $pid = $this->getCatePid($cid);

            $arr = array();

            if($cid == 0){

                $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$price).'">全部</a>';

            }else{

                $arr[] = '<a href="'.U('/f_0'.'_'.$lid.'_'.$price).'">全部</a>';

            }

            

            foreach($allCate as $v){

                if($pid == $v['cid'] || $v['cid'] == $cid){

                    $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$price).'">'.$v['cname'].'</a>';

                }else{

                    $arr[] = '<a href="'.U('/f_'.$v["cid"].'_'.$lid.'_'.$price).'">'.$v['cname'].'</a>';

                }

            }//dump($arr);die;

            $this->assign('cate',$arr);

            if($pid == 0 && $cid != 0){

                    $sonCate = $this->getCateSon($cid);

                }else{

                    $sonCate = $this->getCateSon($pid);

            }

            if(empty($sonCate)) return;

            $arr = array();

            if($pid == 0){

                $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$price).'">全部</a>';

            }else{

                $arr[] = '<a href="'.U('/f_'.$pid.'_'.$lid.'_'.$price).'">全部</a>';

            }


            foreach ($sonCate as $v){

                if($v['cid'] == $cid){

                    $arr[] = '<a class="active" href="'.U('/f_'.$v["cid"].'_'.$lid.'_'.$price).'">'.$v['cname'].'</a>';

                }else{

                    $arr[] = '<a href="'.U('/f_'.$v["cid"].'_'.$lid.'_'.$price).'">'.$v['cname'].'</a>';

                }

            }//dump($sonCate);

            $this->assign('sonCate',$arr);

        }


        //读取地区

        Private function getLocality($cid,$lid,$price){

            $allLocality = $this->getLocalitySon();

            $pid = $this->getLocalityPid($lid);

            $arr = array();

            if($lid == 0){

                $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$price).'">全部</a>';

            }else{

                $arr[] = '<a href="'.U('/f_'.$cid.'_0'.'_'.$price).'">全部</a>';

            }

            foreach($allLocality as $v){

                if($pid == $v['lid'] || $v['lid'] == $lid){

                    $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$price).'">'.$v['lname'].'</a>';

                    //$arr[] = '<a class="active" href="'.U(GROUP_NAME."/Index/index",array('cid'=>$v['cid'])).'">'.$v['cname'].'</a>';

                }else{

                    $arr[] = '<a href="'.U('/f_'.$cid.'_'.$v["lid"].'_'.$price).'">'.$v['lname'].'</a>';

                }

            }//dump($arr);die;

            $this->assign('locality',$arr);

            if($pid == 0 && $lid != 0){

                    $sonLocality = $this->getLocalitySon($lid);

            }else{

                    $sonLocality = $this->getLocalitySon($pid);

            }

            if(empty($sonLocality)) return;

            $arr = array();

            if($pid == 0){

                $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$price).'">全部</a>';

            }else{

                $arr[] = '<a href="'.U('/f_'.$cid.'_'.$pid.'_'.$price).'">全部</a>';

            }


            foreach ($sonLocality as $v){

                if($v['lid'] == $lid){

                    $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$v["lid"].'_'.$price).'">'.$v['lname'].'</a>';

                }else{

                    $arr[] = '<a href="'.U('/f_'.$cid.'_'.$v["lid"].'_'.$price).'">'.$v['lname'].'</a>';

                }

            }

            $this->assign('sonLocality',$arr);

        }


        //根据传入的父级ID查找其子分类

        Private function getCateSon($pid=0){

            $where = array('pid'=>$pid,'display'=>1);

            return M('category')->where($where)->field('cid,cname')->order('sort asc')->select();

        }


        //根据cid获取其父级Id

        Private function getCatePid($cid){

            $where = array('cid'=>$cid,'display'=>1);

            return M('category')->where($where)->getField('pid');

        }


        //根据传入的父级ID查找其子地区

        Private function getLocalitySon($pid=0){

            $where = array('pid'=>$pid,'display'=>1);

            return M('locality')->where($where)->field('lid,lname')->order('sort asc')->select();

        }


        //根据cid获取其父级Id

        Private function getLocalityPid($lid){

            $where = array('lid'=>$lid,'display'=>1);

            return M('locality')->where($where)->getField('pid');

        }



        //设置价格筛选区间

        Private function getPrice($cid,$lid,$price){

            $key = '';

            if($cid == 0){

                $key = 'all';

            }else{

                $pid = $this->getCatePid($cid);

                $key = $pid?$pid:$cid;

            }

            $prices = C('price');

            $priceKey = $prices[$key];

            if($price == '0-0'){

                $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$price).'">全部</a>';

            }else{

                $arr[] = '<a href="'.U('/f_'.$cid.'_'.$lid.'_0-0').'">全部</a>';

            }


            foreach($priceKey as $v){

                if($price == $v[1]){

                    $arr[] = '<a class="active" href="'.U('/f_'.$cid.'_'.$lid.'_'.$v[1]).'">'.$v[0].'</a>';

                }else{

                    $arr[] = '<a href="'.U('/f_'.$cid.'_'.$lid.'_'.$v[1]).'">'.$v[0].'</a>';

                }

            }//dump($arr);

            $this->assign('price',$arr);

        }

    }

文章来源:http://www.thinkphp.cn/topic/6406.html