vue.js 访问每个购物车项目的变体Shopify

pgpifvop  于 2022-11-17  发布在  Vue.js
关注(0)|答案(2)|浏览(158)

首先,我总是喜欢发布可运行的示例,但是由于这是一个js和服务器端在shopify上呈现的liquid的混合体,我不能得到一个运行的示例。
在shopify中,可以像{{ product }}一样从产品模板中访问product对象。
购物车对象具有items属性,该属性是购物车中所有项目的数组。购物车中的每个item对象都不同于product对象。product对象具有变量列表,而购物车item对象没有。
这样做的目的是为了能够编辑购物车中项目的大小。
我的问题是,你怎么才能得到所有的链接变量呢?你必须移动到产品,得到一个所有变量的列表,从变量到product_id
这很棘手,因为当你得到cart对象的fetch响应时,你会得到cart中每个item的一个product_id,但是除非你在产品页面上,否则你不能得到产品对象。
为了帮助形象化购物车,请看下面的内容:

{
  items: [
    {
      handle: 'product-handle',
      product_id: 123,
      variant_title: 'product variant'
    }
  ]
}

需要完成的是:

{
  items: [
    {
      handle: 'product-handle',
      product_id: 123,
      /**
       * to get this you need first access to the product object from the product 
       * template. You could convert the product to json with a filter
       * e.g. const product = {{ product | json }} but you don't have the 
       * opportunity to be on the product template each time you edit a cart item
      */
      variants: [
        { color: 'white', size: 's' },
        { color: 'white', size: 'm' }
      ]
    }
  ]
}
tyg4sfes

tyg4sfes1#

如果你有一个产品ID或句柄,你可以自由地打电话给Shopify来获得关于产品的更多信息,比如分配给它的所有变体,因此,所有的选项。所以要改变到一个不同的选项,你需要从购物车中删除一个变体ID,并添加一个不同的。你想要的。你可以使用StorefrontAPI调用来获取产品信息。这通常是商家做你需要做的事情的方式。

hkmswyz6

hkmswyz62#

在与这个斗争了一整天之后,我终于得到了它。对于任何其他曾经遇到这个的人,你需要做这样的事情。
来自购物车模板cart.liquid

const cart = (() => {
  const cart = {{ cart | json }}
  const items = []
  let variants

  {% for item in cart.items %}
    item = {{ item | json }}
    variants = []

    {% for variant in item.product.variants %}
      variant = {{ variant | json }}
      variants.push(variant)
    {% endfor %}

    item.variants = variants
    items.push(item)
  {% endfor %}
  cart.items = items

  return cart
})();

现在,购物车中的每个项目属性都有了变量。

相关问题