gpt4 book ai didi

javascript - Ajax - 在 Shopify/Liquid 中按价格过滤

转载 作者:行者123 更新时间:2023-12-04 07:51:42 26 4
gpt4 key购买 nike

我有一个集合,我希望能够按价格过滤( 而不是 排序)产品。我愿意 不是 想使用一个应用程序。
我知道这个问题 Add price filter in shopify?然而,这不是我要找的;我希望能够选择任何数字组合,例如4 美元到 20 美元,或 7 美元到 30 美元等之间,用户可以更改,而不仅仅是预定范围。我在 Shopify 网站上看到它完成,因此知道它可以完成。我相信这将需要 ajax 调用。
答案对我自己和其他许多人都非常有帮助,因为这似乎是一个非常基本的要求,在 SO/Shopify 论坛上仍未得到答复,即使只是一般说明而不是任何特定代码。作为引用,我使用的是默认(首次亮相)主题。

最佳答案

我的项目与你的相似,所以请填写下面的空白。
创建收藏模板 collection.price-filter.liquid使用ajax获取产品json。当然有 250 的限制。如果您有超过 250 则需要使用应用程序先过滤结果。或者,只使用多个请求。

<script>
var allProducts;
var filteredProducts = [];
var activeFilter = [];
$(document).ready(function(){
var url = '{{collection.url}}/products.json?limit=250';
const res = getProducts(url);
});

function getProducts(url){
$.ajax({
type: 'GET',
url: url,
success: function(res){

allProducts = res.products;
filterProducts(allProducts);
},
error: function(status){
alert(status);
}
});
}
</script>
筛选产品填写 filteredProducts数组对象
//loop through the products, create categories ($20-$40, $40-$60, etc.)
function filterProducts(products){
var cat1 = '20-40', cat2 = '40-60';
var currentCat;
products.forEach(function (i, j){
if (i.price > 20 && i.price <= 40){
currentCat = cat1;
else if (i.price > 40 && i.price <= 60) {
currentCat = cat2;
}
if(filteredProducts[currentCat]){
filteredProducts[currentCat].push(i);
}
else {
filteredProducts[currentCat] = [i]
}
};
});
}
生成后 filteredProducts ,听 checkbox从用户中选择,添加 selection到一个名为 activeFilter 的数组中
function getActiveFilter(){
$('#myFilter').each(function(){
if($(this).is(':checked')){
//add to activeFilter
}
});
}
生成 resultFilter来自 filteredProductsactiveFilter ,消除共同结果;
function resultFilter(){
var result = [];
activeFilter.forEach(function (i, value){
Object.keys(value).forEach(function(j, product){
//add to result
};
});
}
使用 handlebars.js 构建/显示产品结果
<script id="ProductTemplate" type="text/x-handlebars-template">
{% raw %}
{{#product}}
<div class="col">
<a href="/products/{{productHandle}}" class="grid__image">
<div class="product__image-wrapper" style="background-color: white;">
<img class="no-js lazyload" width="316" height="237"
data-src="{{ featuredImg }}"
data-widths="[108, 360, 375, 414, 568, 684, 720, 732, 736, 768, 1024, 1200, 1296, 1512, 1728, 1944, 2048]"
data-aspectratio="1.33"
data-sizes="auto"
data-parent-fit="width"
alt="{{ title }}">
</div>
</a>
<p class="h5"><a href="/products/{{productHandle}}">{{ title }}</a></p>
</div>
{{/product}}
{% endraw %}
</script>
将数据插入 #container-products ,您希望过滤后的产品显示的位置。
function buildFilteredProducts(filteredProds) {
var $productContainer = $('#container-product');
$productContainer.empty();
if(filteredProds.length <= 0){
$productContainer.append('empty result');
return;
}

var products = [];
var product = {};
var data = {};
var source = $("#ProductTemplate").html();
var template = Handlebars.compile(source);
products = filteredProds.map(function(productItem) {
return product = {
id: productItem.id,
title: decodeHtml(productItem.title),
featuredImg: responsiveImage(productItem.images[0].src),
productHandle: productItem.handle
}
});

data = {
product: products
}

$productContainer.append(template(data));
}

关于javascript - Ajax - 在 Shopify/Liquid 中按价格过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66931582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com