多条件组合筛选,可以实现用户根据多个条件灵巧组合查询,最经典的案例便是购物网站上的组合筛选。
利用 ThinkPHP 编写多条件组合筛选不是特殊好实现,最直接的方法便是利用 js 赞助。本案例利用的是 jquery。
这里要实现的功能如下:

多组筛选分类相互不冲突;
选择的条件都会高亮显示(增加样式)
URL对应发生变革
办理的思路是,利用 jquery ,对每次点击进行判断,利用 ThinkPHP 方便的地址常量的输出,直接天生对应的 URL,然后通过 jquery 跳转。
以是关键便是每次点击按钮天生精确的URL,并且利用 jquery 打开它。
事先复习一下 ThinkPHP 的常量输出的方法:
代码表示阐明__URL__天生当前方法的URL{:I('xx')}在页面中输出URL中通报的相应的参数值首先是实现给点击筛选条件高亮,详细实现思路与我之前编写的 ThinkPHP制作导航高亮和当前页高亮显示的最佳方法 类似。事先在筛选条件上做标记,利用 {:I('xx')} 可以在页面中得到 URL 中的参数值,然后根据参数值和标记比拟,给当前的条件增加 css ,达到高亮的效果。
比如,我的筛选 HTML 编写如下:
<divclass=\"大众p_col_s1\公众>
活动分类:
<ahref=\公众javascript:filter('col','')\公众class=\"大众p_col\"大众id=\"大众col_all\"大众>全部</a>
<volistname=\公众res2\"大众id=\"大众vo2\"大众>
<ahref='javascript:filter(\"大众col\"大众,\"大众{$vo2.colid}\"大众);'class=\公众p_col\"大众id=\"大众col_{$vo2.colid}\公众>{$vo2.colname}</a>
</volist>
</div>
<divclass=\"大众p_col_s1\公众>
筛选条件:
<ahref='javascript:filter(\公众tl\公众,\"大众\"大众);'class=\"大众p_col\"大众id=\"大众tl2\公众>查看全部</a>
<ahref='javascript:filter(\公众tl\"大众,\"大众1\公众);'class=\"大众p_col\"大众id=\公众tl1\"大众>只看未过期</a>
</div>
<divclass=\"大众p_col_s1\"大众>
安全分类:
<ahref=\公众javascript:filter('s','')\公众class=\公众p_col\"大众id=\"大众s_all\"大众>全部</a>
<ahref='javascript:filter(\"大众s\公众,\"大众0\"大众);'class=\"大众p_col\公众id=\公众s0\"大众>安全</a>
<ahref='javascript:filter(\公众s\公众,\公众1\公众);'class=\"大众p_col\公众id=\"大众s1\公众>一样平常</a>
<ahref='javascript:filter(\"大众s\"大众,\"大众2\"大众);'class=\"大众p_col\"大众id=\公众s2\"大众>危险</a>
</div>
然后编写 jquery 代码,由于须要页面打开就运行,以是须要把代码写在 $(function(){…}) 中
$(function() {
var colid = \公众{:I('col')}\"大众;
if (colid != \"大众\"大众) {
$(\"大众#col_\"大众 + colid).addClass('p_col_hover');
} else {
$(\"大众#col_all\"大众).addClass('p_col_hover');
}
var tl = \"大众{:I('tl')}\"大众;
if (tl == \"大众1\公众) {
$(\"大众#tl\"大众 + tl).addClass('p_col_hover');
} else {
$(\"大众#tl2\"大众).addClass('p_col_hover');
}
var s = \"大众{:I('s')}\"大众;
if (s != \公众\公众) {
$(\"大众#s\公众 + s).addClass('p_col_hover');
} else {
$(\公众#s_all\公众).addClass('p_col_hover');
}
})
至此,已经实现了高亮。
接下来是实现组装 URL 并且打开了。我对每一个筛选条件的 URL 进行了修正,将其指向了 javascript 方法 filter(),方法代码如下:
function filter(a, b) {
var str = \"大众__URL__/po/\公众;
var colid = \"大众{:I('col')}\"大众;
if (colid != \"大众\"大众 && a != \"大众col\公众) {
str = str + \"大众col/\"大众 + colid + \公众/\"大众;
}
var tl = \公众{:I('tl')}\"大众;
if (tl != \"大众\"大众 && a != \"大众tl\"大众) {
str = str + \公众tl/\"大众 + tl + \"大众/\"大众;
}
var s = \"大众{:I('s')}\公众;
if (s != \"大众\公众 && a != \公众s\"大众) {
str = str + \"大众s/\公众 + s + \"大众/\公众;
}
if (b != \公众\"大众) {
str = str + a + \"大众/\"大众 + b + \公众/\"大众;
}
window.location.href = str;
}
个中两个参数,a 和 b ,a 参数用来识别筛选组,b用来识别选项组里的选项。方法逐个试图获取 URL 中的参数,如果有,则追加到临时字符串中,如果没有则跳过,为了避免重复,在判断中还增加了判断是否是同一组,如果是同一组,则不会追加,末了走完在末了增加新点击的参数,终极组合成为目标 URL ,进行跳转。
终极实现的效果如下: