Shopify 如何在我的应用程序js文件中获取购物车对象

Shopify 如何在我的应用程序js文件中获取购物车对象,shopify,Shopify,嗨,我正在开发shopify应用程序。 我使用脚本_标记为shopify商店前端添加了custom.js。 在查看源代码时,我可以看到自定义已成功添加到js 基本上,我需要一个函数或对象如果我们在shopify中有我可以在custom.js文件中使用的功能,请记住,我不是说主题文件,它会返回购物车的完整信息,如添加了多少产品等,因为我需要将特定对象与ajax请求一起发送到php文件 有没有办法在我的应用程序js文件中获取购物车详细信息?因为您使用的是(.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对象

$.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。或者,如果您需要包括