Javascript Shopify-购买免费产品

Javascript Shopify-购买免费产品,javascript,shopify,liquid,Javascript,Shopify,Liquid,当指定集合中的产品也存在时,代码段允许将免费产品应用于购物车。如果从指定集合中删除了其他产品,则免费产品将从购物车中删除 问题:用户可以添加多个可能不是来自指定集合的项目,然后可以删除指定集合产品,免费产品将保留在购物车中。i、 e.用户可以添加产品以使用免费项目填充购物车,然后添加另一个项目,该项目可能为$5,而该项目可能为$50或更多。作为回报,用户只需花5美元购买免费产品 下面的代码片段可以工作,但我希望它更健壮。目前,它的工作原理是用购买时提供的免费礼物取代“产品手柄”。仅当购物车中存在

当指定集合中的产品也存在时,代码段允许将免费产品应用于购物车。如果从指定集合中删除了其他产品,则免费产品将从购物车中删除

问题:用户可以添加多个可能不是来自指定集合的项目,然后可以删除指定集合产品,免费产品将保留在购物车中。i、 e.用户可以添加产品以使用免费项目填充购物车,然后添加另一个项目,该项目可能为$5,而该项目可能为$50或更多。作为回报,用户只需花5美元购买免费产品

下面的代码片段可以工作,但我希望它更健壮。目前,它的工作原理是用购买时提供的免费礼物取代“产品手柄”。仅当购物车中存在免费产品和指定集合“集合句柄”中的产品时,它才会填充免费产品。如果从集合中删除产品,则免费项目也将从购物车中删除

问题是:有能力添加多个项目,并删除原始产品,其中包括免费项目和结帐

搜索从项目中删除免费产品的解决方案,除非购物车中存在指定集合中的产品

{% assign product = all_products['PRODUCT-HANDLE'] %}

{% unless cart.item_count == 0 or product.empty? or product.variants.first.available == false %}

  {% assign variant_id = product.variants.first.id %}



{% assign found = false %}
{% unless cart.item_count < 1 %}
  {% for line_item in cart.items %}
    {% for collection in line_item.product.collections %}
      {% if collection.handle == 'COLLECTION_HANDLE' %} 
        {% assign found = true %}
        {% break %}
      {% endif %}
    {% endfor %}
  {% endfor %}


  <script>
  (function($) {
    var cartItems = {{ cart.items | json }},
        qtyInTheCart = 0,
        cartUpdates = {};
    for (var i=0; i<cartItems.length; i++) {
      if ( cartItems[i].id === {{ variant_id }} ) {
        qtyInTheCart = cartItems[i].quantity;
        break;
      }
    }
          if ( ( cartItems.length === 1 ) && ( qtyInTheCart > 0 ) ) {
      cartUpdates = { {{ variant_id }}: 0 }
    }
      else if ( ( cartItems.length >= 1 ) && ( qtyInTheCart !== 1 ) && {{found}} == true ) {

     cartUpdates = { {{ variant_id }}: 1 }



    }
    else {
      return;
    }
    var params = {
      type: 'POST',
      url: '/cart/update.js',
      data: { updates: cartUpdates },
      dataType: 'json',
      success: function(stuff) { 
        window.location.href = '/cart';
      }
    }; 


    $.ajax(params);

  })(jQuery);
  </script>

{% endunless %}
{% endunless %}
{%assign product=all_products['product-HANDLE']%}
{%除非cart.item_count==0或product.empty?或product.variants.first.available==false%}
{%assign variant_id=product.variants.first.id%}
{%assign found=false%}
{%除非cart.item_计数<1%}
{cart.items%}中的第_行项目为%
{u item.product.collections%}行中的集合为%
{%if collection.handle=='collection\u handle%}
{%assign found=true%}
{%break%}
{%endif%}
{%endfor%}
{%endfor%}
(函数($){
var cartimes={cart.items | json},
qtyInTheCart=0,
cartUpdates={};
对于(var i=0;i 0)){
cartUpdates={{{variant_id}}:0}
}
else如果((cartItems.length>=1)&&&(qtyInTheCart!==1)&&{found}}==true){
cartUpdates={{{variant_id}}:1}
}
否则{
返回;
}
变量参数={
键入:“POST”,
url:“/cart/update.js”,
数据:{updates:cartUpdates},
数据类型:“json”,
成功:函数(stuff){
window.location.href='/cart';
}
}; 
$.ajax(params);
})(jQuery);
{%end除非%}
{%end除非%}

我希望结果是,如果将产品A添加到购物车中,则购物车将填充免费提供的产品B。如果随后删除了产品A或产品A不在购物车中,则即使存在其他产品,产品B也将从购物车中删除。

尝试将Shopify折扣自动折扣功能与脚本一起使用,并获得一个您免费提供的产品的价值。以下是如何创建自动折扣:

  • 转到折扣->创建折扣->自动折扣
  • 在折扣类型中,选择购买X获得Y
  • 选择要提供免费产品的集合或产品
  • 填写所有其他需要创建的详细信息和规则

  • 现在,只要满足规则,产品在购物车中将是免费的,如果不满足规则,产品将恢复到其原始价格。

    以极简主义的方式,如果购物车的总价格低于某个值,比如低于$50购物车价值,并且免费产品被删除,我希望从购物车中删除免费产品。因此,我尝试使用{%除非cart.total_price<5000%}替换数量过滤器,但没有成功。任何帮助都将不胜感激。A)任何类似的内容都很容易被黑客攻击,因此请注意B)在结帐按钮上添加一个单击侦听器,并检查购物车是否正常C)请注意Shopify Plus没有这些胡说八道,但这样做的成本更高use@DavidLazar您是否建议将带有特定产品的免费商品添加到购物车中?不幸的是,Shopify Plus目前不在预算之内,希望在将来。事实上,这是一个很好的主意!我总是忽略了一些简单的过程。非常感谢。