您好我正在购买shopify应用程序。 使用script_tag我为shopify商店前端添加了custom.js. 查看视图源时,我可以看到自定义js成功添加
基本上我需要一个功能或对象如果我们在shopify中可以在我的custom.js文件中使用,请记住我不是在谈论主题文件,它会返回我的完整信息产品添加等因为我需要将我的ajax请求发送到php文件的特定对象 有没有办法在我的app js文件中获取购物车细节?
答案 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.js
或function 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}}