Shopify 如何在我的应用程序js文件中获取购物车对象
嗨,我正在开发shopify应用程序。 我使用脚本_标记为shopify商店前端添加了custom.js。 在查看源代码时,我可以看到自定义已成功添加到js 基本上,我需要一个函数或对象如果我们在shopify中有我可以在custom.js文件中使用的功能,请记住,我不是说主题文件,它会返回购物车的完整信息,如添加了多少产品等,因为我需要将特定对象与ajax请求一起发送到php文件 有没有办法在我的应用程序js文件中获取购物车详细信息?因为您使用的是(.js)文件,所以无法直接访问购物车对象。相反,您可以使用(.js.liquid)文件类型来访问购物车对象。(.js)和(.js.liqd)的工作原理类似。但通过使用(.js.liquid)文件格式,您将能够访问所有shopify对象 代码 对于(.js.liquid)文件类型 shopify的参考 但是,如果您想访问(.js)文件中的cart对象,可以通过GET调用访问json格式的cart对象Shopify 如何在我的应用程序js文件中获取购物车对象,shopify,Shopify,嗨,我正在开发shopify应用程序。 我使用脚本_标记为shopify商店前端添加了custom.js。 在查看源代码时,我可以看到自定义已成功添加到js 基本上,我需要一个函数或对象如果我们在shopify中有我可以在custom.js文件中使用的功能,请记住,我不是说主题文件,它会返回购物车的完整信息,如添加了多少产品等,因为我需要将特定对象与ajax请求一起发送到php文件 有没有办法在我的应用程序js文件中获取购物车详细信息?因为您使用的是(.js)文件,所以无法直接访问购物车对象。相
$.ajax({
type: 'GET',
url: '/cart.js',
cache: false,
dataType: 'json',
success: function(cart) {
// whatever you want to do with the cart obj
}
});
因为您使用的是(.js)文件,所以无法直接访问购物车对象。相反,您可以使用(.js.liquid)文件类型来访问购物车对象。(.js)和(.js.liqd)的工作原理类似。但通过使用(.js.liquid)文件格式,您将能够访问所有shopify对象
代码
对于(.js.liquid)文件类型
shopify的参考
但是,如果您想访问(.js)文件中的cart对象,可以通过GET调用访问json格式的cart对象
$.ajax({
type: 'GET',
url: '/cart.js',
cache: false,
dataType: 'json',
success: function(cart) {
// whatever you want to do with the cart obj
}
});
尽管Shopify为资产文件提供了
.js.liquid
文件格式,但Shopify阻止访问任何可能是动态的信息(这将破坏资产缓存的能力)。因此,尽管尝试使用{{cart | json}}
将购物车转储到资产中可能是很直观的,但购物车是非常动态的,绝对不是可以直接转储到代码中的东西
幸运的是,还有其他方法可以获取此信息!如果您想让购物车立即加载页面,可以使用代码段文件设置一个全局javascript变量,然后由您的资产文件访问该变量。但是,这将只获取页面加载时的购物车,如果您使用javascript在购物车中添加/删除/修改项目,您将希望能够在需要时获取当前购物车
这就让我们开始使用AJAX来访问商店的cart.js
端点。如果您使用的主题包含一整套Shopify助手函数,那么您可能已经有一个名为Shopify.getCart
-这是一个从上述端点获取当前购物车的函数,如果您将一个函数作为参数传递到此函数中,那么在异步调用完成后,将使用当前cart对象调用您的函数
如果您的主题没有内置的getCart函数,那么编写自己的主题就很容易了。例如,如果您已经在主题中使用jQuery,则可以创建如下函数:
function getCart(callback){
jQuery.getJSON('/cart.js', callback);
}
要获取购物车并对其进行处理,只需创建一个处理购物车数据的函数,并将该函数用作getCart函数中的参数
例如:
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);
此外,值得注意的是,当您更改或更新购物车(分别通过/cart/change.js
或/cart.update.js
端点)时,Shopify的响应对象会将更新后的购物车对象传递给已提供的任何成功函数。例如,您可以重复使用更新功能:
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为资产文件提供了
.js.liquid
文件格式,但Shopify阻止访问任何可能是动态的信息(这将破坏资产缓存的能力)。因此,尽管尝试使用{{cart | json}}
将购物车转储到资产中可能是很直观的,但购物车是非常动态的,绝对不是可以直接转储到代码中的东西
幸运的是,还有其他方法可以获取此信息!如果您想让购物车立即加载页面,可以使用代码段文件设置一个全局javascript变量,然后由您的资产文件访问该变量。但是,这将只获取页面加载时的购物车,如果您使用javascript在购物车中添加/删除/修改项目,您将希望能够在需要时获取当前购物车
这就让我们开始使用AJAX来访问商店的cart.js
端点。如果您使用的主题包含一整套Shopify助手函数,那么您可能已经有一个名为Shopify.getCart
-这是一个从上述端点获取当前购物车的函数,如果您将一个函数作为参数传递到此函数中,那么在异步调用完成后,将使用当前cart对象调用您的函数
如果您的主题没有内置的getCart函数,那么编写自己的主题就很容易了。例如,如果您已经在主题中使用jQuery,则可以创建如下函数:
function getCart(callback){
jQuery.getJSON('/cart.js', callback);
}
要获取购物车并对其进行处理,只需创建一个处理购物车数据的函数,并将该函数用作getCart函数中的参数
例如:
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);
此外,值得注意的是,当您更改或更新购物车(分别通过/cart/change.js
或/cart.update.js
端点)时,Shopify的响应对象会将更新后的购物车对象传递给已提供的任何成功函数。例如,您可以重复使用更新功能:
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)
首先,感谢您的回复是的,我们可以这样做,但我正在寻找一种方法,如果我们有目标。还有什么方法可以让我们在购物车页面上登录js?因为我的js包含在每个页面上,所以这个脚本将在每个页面上调用。在js中有没有办法只在购物车页面上限制此cal,或者我们是否可以只在购物车页面上包含我的js?是的,您可以用两种不同的方式限制cart.js调用只在购物车页面上。首先,仅在cart.liquid文件中包含定制的js。或者,如果您需要包括