400-800-9385
网站建设资讯详细

thinkphp框架下解決商城网站的多个类别多选的方法

发表日期:2018-08-17 09:41:34   作者来源:陈应信   浏览:4819   标签:商城网站建设    
国内的商城网站在筛选类别的时候,筛选条件大部分都是单选的,像某东某宁那样的网站就是这样子的,如下图所示:

商城面包屑

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

商品分类

 
像上图那样的多个分类,例如我希望找到外套和上衣的类别,其他的类别不想显示,则可以点击这两个类别,品牌分类的原理也是一样。现在要解决的事情是如何用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);需要更改过来

作者:方维网络技术部陈应信
如没特殊注明,文章均为方维网络原创,转载请注明来自https://www.szfangwei.cn/news/4518.html