如何在我的app js文件中获取购物车对象

时间:2017-05-02 14:28:40

标签: shopify

您好我正在购买shopify应用程序。 使用script_tag我为shopify商店前端添加了custom.js. 查看视图源时,我可以看到自定义js成功添加

基本上我需要一个功能或对象如果我们在shopify中可以在我的custom.js文件中使用,请记住我不是在谈论主题文件,它会返回我的完整信息产品添加等因为我需要将我的ajax请求发送到php文件的特定对象 有没有办法在我的app js文件中获取购物车细节?

2 个答案:

答案 0 :(得分:2)

由于您使用的是(.js)文件,因此无法直接访问购物车对象。相反,您可以使用(.js.liquid)文件类型来访问购物车对象。 (.js)和(.js.liqud)的工作方式类似。但是通过使用(.js.liquid)文件格式,您将能够访问所有shopify对象。

...代码

对于(.js.liquid)文件类型 参考shopify的cart object

但是如果你想访问(.js)文件中的购物车对象,你可以通过GET调用以json格式访问。

$.ajax({
        type: 'GET',
        url: '/cart.js',
        cache: false,
        dataType: 'json',
        success: function(cart) {
          // whatever you want to do with the cart obj
        }
    });

答案 1 :(得分:1)

虽然Shopify为资产文件提供{{ cart | json }}文件格式,但Shopify可以阻止访问任何可能是动态的信息(这会破坏缓存资产的能力)。因此,尽管尝试使用cart.js将购物车转储到资产中可能很直观,但购物车非常动态,绝对不能将您的资料转储到您的代码中。

幸运的是,还有其他方法可以获取此信息!如果想在页面加载时立即拥有购物车,您可以使用片段文件来设置全局javascript变量,然后资产文件将访问该变量。但是,这只会获得在页面加载时存在的购物车,如果您使用javascript添加/删除/修改购物车中的商品,您将希望能够在需要时获取当前购物车。

这使我们使用AJAX来点击商店的Shopify.getCart端点。如果您正在使用具有全套Shopify辅助函数的主题,则可能已经有一个名为function getCart(callback){ jQuery.getJSON('/cart.js', callback); } 的函数 - 这是一个从上面的端点抓取当前购物车的函数,如果您传递一个函数作为此函数的参数,一旦异步调用完成,就可以使用当前的cart对象调用函数。

如果您的主题没有内置的getCart功能,那么编写自己的主题非常容易。例如,如果您已在主题中使用jQuery,则可以创建如下函数:

function updateTotalPriceOnTheScreen(cart){
//This example assumes that there's a DOM element on the page that has the ID cart-total-price
  document.getElementById('cart-total-price').innerHTML = Shopify.formatMoney(cart.total_price, '${{ amount }}');
}

getCart(updateTotalPriceOnTheScreen);

要获得购物车并使用它做一些事情,只需创建一个与购物车数据相关的功能,并将该功能用作getCart功能中的参数。

示例:

/cart/change.js

此外,值得注意的是,当您更改或更新购物车(分别通过/cart.update.jsfunction changeItem(line, quantity, success_callback, error_callback){ jQuery.ajax({ url:'/cart/change.js', type:'post', dataType:'json', data:{ line:line, quantity:quantity }, success:success_callback, error:error_callback }) } //Test case: requires at least one item in the cart. Will update the quantity of line 1 to 50 units, then update the 'total price' element on the page var line=1, qty=50; changeItem(line, qty, updateTotalPriceOnTheScreen) 端点)时,Shopify的响应对象会将更新的购物车对象传递给已提供的任何成功功能。因此,您可以重新使用更新功能:

{{1}}