国内的商□□城网站在✦筛选类别□□□□的时候,筛选条件♦大部分都□□□□是单选的,像某东某○宁那样的□□□□网站就是□□□□这样子的,如下图所□□示:

但对于国◇外或中国□□香港的用□□□□户来说,他们在浏□□□□览商城网□□□□站的时候□□更习惯类□□别多选的□□□操作,就是根据□□□自己的爱□□□好选择自□□己需要的□□一个或多□□□个分类,这样也能□□过滤掉自※己不需要□□□□的分类商□□品,网页的排□□版如下图□□□所示:

像上图那□□样的多个□□□□分类,例如我希□□望找到外□□□套和上衣□□□□的类别,其他的类◤别不想显□□示,则可以点□□□□击这两个◈类别,品牌分类□□的原理也❖是一样。现在要解□□决的事情□□□□是如何用thinkphp框架写出丨多个分类□□□□并多选的□□□□功能。
首先要做◎的是,在当前页□□□面下将所□□□有的分类□□的以id名称为key值放在同□□□一个数组□□□里,我们将这◢个数组命□□□名为$url_arr. 例如类别□□的小类的id名称为cid,品牌的id名称为bid,在URL里显示如“/cid/100/bid/71.html”,即选择小★类id为100,品牌id为71的条件,那么可以◉得到$url_arr[‘cid’]=100;$url_arr[‘bid’]=71;如果是多□□□□选,我们用半□□□□角逗号来□□□分隔,例如/cid/100%2C87/bid/71%2C73.html,其他URL里的”%2C7”就是半角□□□□逗号的字□□符值。
然后我们□□要让分类□□□□中的a链接能很□□□好显示出□□□确定的URL,这里需要□□□引入我写□□□的一个函◎数,用这个函□□□□数可以快□□□□速的获取□□□□到不同分□□□类名称a链接的URL,如下图所□□□□示:

分类的页面代码如下图:

现在根据□□□页面代码◆对参数进□□□□行一些说•明:$arr_url就是刚才□□讲的那个□□值,$id_name也是刚才丨讲的id名称,也就是cid;$cat_id是当前分□□□类的id值,$url=’’是因为U($url)会等当前□□页面的不□□参数的URL值,默认就让$url为空就可□□□□以了。
图2里有一个“清除”的功能,就是清除□□该类的所❖有条件,同样是调□□用getParam函数,只要将$cat_id设置成空□□□就可以了,例如要清□□□□除分类的□□□□条件,代码如下:<a href="{$url_arr|getParam='cid',''}">清除</a>。
如何判断该类别是否被选中呢?我们可以用到下图这个函数:

其中页面□□□□代码:<span {$vo.cat_id|item_exist_aray=$url_arr['cid']}></span>,默认情况▼下span的前景为•白色,如果加个class=”on”,则span背景为黑□□□色,即该类别□□被选中了。
要注意的◈是,在thinkphp的控制器□□□□里,需要判断□□一下页面□□□上显示的□□□各种参数□□□是否空,如果为空□□就不要将□□该参数赋□□□□于$arr_url了,不然有可♦能在URL显示上可▲能会出现□□□□错误;在模型里,以前用的◇条件是category_id=$cid,现在需要□□□□用array('in',$cid);需要更改▲过来
作者:OETY欧亿技术部陈应信