如何使用 PHP, JS 将二级过滤添加到过滤结果
How to add second level filtering to filtered results using PHP, JS
我的网站上有一个页面,用户可以在其中 select 框 return 基于他们的 select 离子的查询。例如,我的 header 看起来像:
_Burgers _Fries _Beverage
_small _medium _large
第一行效果很好,如果用户 select 汉堡,它 return 只是汉堡餐,如果他们 select 汉堡和饮料它 return只有餐点有汉堡和饮料等
例如,如果页面如下所示:
X Burgers X Fries _ Beverage
_small _medium _large
正在 returning:
Burger & Fries Meal Combo #1 (small)
Burger & Fries Meal Combo #1 (medium)
Burger & Fries Meal Combo #1 (large)
Burger & Fries Meal Combo #2 (small)
Burger & Fries Meal Combo #2 (medium)
Burger & Fries Meal Combo #2 (large)
我遇到的问题是弄清楚如何添加第二级过滤器,这样如果用户 selects "small",它只会 returns 小组合选项.
我使用的是 MODX CMS,所以我的着陆页具有以下代码([[whatever]] 只是对数据库的查询 return 结果 div):
<div class="combo-hide-me" id="default">[[!comboLanding? &filter=`default`]]</div>
<div class="combo-hide-me" id="burger_div_id" style="display: none;">[[!comboLanding? &filter=`b`]]</div>
<div class="combo-hide-me" id="fries_div_id" style="display: none;">[[!comboLanding? &filter=`f`]]</div>
<div class="combo-hide-me" id="beverage_div_id" style="display: none;">[[!comboLanding? &filter=`b`]]</div>
<div class="combo-hide-me" id="beveragefries_div_id" style="display: none;">[[!comboLanding? &filter=`bf`]]</div>
etc..
我的 javascript 看起来像:
// combo checkbox selction
$(document).ready(function () {
packageOutput();
});
function packageOutput() {
// set the main div to return filtered results
var packageDiv = $(".plans-container");
// set empty array
var idArr = [];
// get the checked values
var checked = $(".active");
// loop and build array
checked.each(function () {
idArr.push($(this).prop("id"));
});
// remove whitespace in array
var trimArray = idArr.join("");
// function below
toggleShowHide(trimArray, packageDiv);
}
function toggleShowHide(arr, elem) {
// determine if there are boxes checked
var arrLen = arr.length;
// clear last selected item
$(".combo-hide-me").hide();
// set default if array is empty
if (arrLen < 1 ){
//function below
setDefault(elem);
}
// run the show hide based on array of selection
for(i = 0; i < arrLen; i++) {
// set the div name from array
var temp = "#" + arr + "_div_id";
$(temp).show();
$("#default").hide();
}
// unhide
elem.show();
}
function setDefault(elem){
$("#default").show();
}
提前感谢您提供的有关让二级过滤器正常工作的任何指导。
编辑:我刚刚意识到我没有为小、中、大的 select 框添加代码:
<div class="sizes" id="size_div_id">
<h4>Combo Sizes:</h4>
<div class="checks">
<div class="selection">
<input type="checkbox" id="small" name="combosize">
<label for="small"><span></span>Small</label>
</div>
<div class="selection">
<input type="checkbox" id="medium" name="combosize">
<label for="medium"><span></span>Medium</label>
</div>
<div class="selection">
<input type="checkbox" id="large" name="combosize">
<label for="large"><span></span>Large</label>
</div>
</div>
</div>
我能够通过将以下代码插入我的 javascript;
来解决二级过滤问题
$(".classes input[type='checkbox']").click(function(e) {
var innerTextHTML = $(this).parent("div.selection").children('label').text();
var planWrap = $("div.plan."+innerTextHTML).parent();
if ($(this).is(':checked')){
planWrap.show();
}else{
planWrap.hide();
}
});
我在使用它时遇到的一个问题是第 n 行样式,我可以使用 jquery 分离来解决这个问题。
我的网站上有一个页面,用户可以在其中 select 框 return 基于他们的 select 离子的查询。例如,我的 header 看起来像:
_Burgers _Fries _Beverage
_small _medium _large
第一行效果很好,如果用户 select 汉堡,它 return 只是汉堡餐,如果他们 select 汉堡和饮料它 return只有餐点有汉堡和饮料等
例如,如果页面如下所示:
X Burgers X Fries _ Beverage
_small _medium _large
正在 returning:
Burger & Fries Meal Combo #1 (small)
Burger & Fries Meal Combo #1 (medium)
Burger & Fries Meal Combo #1 (large)
Burger & Fries Meal Combo #2 (small)
Burger & Fries Meal Combo #2 (medium)
Burger & Fries Meal Combo #2 (large)
我遇到的问题是弄清楚如何添加第二级过滤器,这样如果用户 selects "small",它只会 returns 小组合选项.
我使用的是 MODX CMS,所以我的着陆页具有以下代码([[whatever]] 只是对数据库的查询 return 结果 div):
<div class="combo-hide-me" id="default">[[!comboLanding? &filter=`default`]]</div>
<div class="combo-hide-me" id="burger_div_id" style="display: none;">[[!comboLanding? &filter=`b`]]</div>
<div class="combo-hide-me" id="fries_div_id" style="display: none;">[[!comboLanding? &filter=`f`]]</div>
<div class="combo-hide-me" id="beverage_div_id" style="display: none;">[[!comboLanding? &filter=`b`]]</div>
<div class="combo-hide-me" id="beveragefries_div_id" style="display: none;">[[!comboLanding? &filter=`bf`]]</div>
etc..
我的 javascript 看起来像:
// combo checkbox selction
$(document).ready(function () {
packageOutput();
});
function packageOutput() {
// set the main div to return filtered results
var packageDiv = $(".plans-container");
// set empty array
var idArr = [];
// get the checked values
var checked = $(".active");
// loop and build array
checked.each(function () {
idArr.push($(this).prop("id"));
});
// remove whitespace in array
var trimArray = idArr.join("");
// function below
toggleShowHide(trimArray, packageDiv);
}
function toggleShowHide(arr, elem) {
// determine if there are boxes checked
var arrLen = arr.length;
// clear last selected item
$(".combo-hide-me").hide();
// set default if array is empty
if (arrLen < 1 ){
//function below
setDefault(elem);
}
// run the show hide based on array of selection
for(i = 0; i < arrLen; i++) {
// set the div name from array
var temp = "#" + arr + "_div_id";
$(temp).show();
$("#default").hide();
}
// unhide
elem.show();
}
function setDefault(elem){
$("#default").show();
}
提前感谢您提供的有关让二级过滤器正常工作的任何指导。
编辑:我刚刚意识到我没有为小、中、大的 select 框添加代码:
<div class="sizes" id="size_div_id">
<h4>Combo Sizes:</h4>
<div class="checks">
<div class="selection">
<input type="checkbox" id="small" name="combosize">
<label for="small"><span></span>Small</label>
</div>
<div class="selection">
<input type="checkbox" id="medium" name="combosize">
<label for="medium"><span></span>Medium</label>
</div>
<div class="selection">
<input type="checkbox" id="large" name="combosize">
<label for="large"><span></span>Large</label>
</div>
</div>
</div>
我能够通过将以下代码插入我的 javascript;
来解决二级过滤问题$(".classes input[type='checkbox']").click(function(e) {
var innerTextHTML = $(this).parent("div.selection").children('label').text();
var planWrap = $("div.plan."+innerTextHTML).parent();
if ($(this).is(':checked')){
planWrap.show();
}else{
planWrap.hide();
}
});
我在使用它时遇到的一个问题是第 n 行样式,我可以使用 jquery 分离来解决这个问题。