【问题标题】:Access Variants for each Cart Item Shopify访问每个购物车商品的变体 Shopify
【发布时间】:2023-02-20 23:02:11
【问题描述】:

首先,我总是喜欢发布可运行的示例,但由于这是 js 和服务器端在 shopify 上呈现液体的混合,所以我无法获得运行示例。

在 shopify 中,您可以从产品模板访问 product 对象,就像 {{ product }} 一样。

购物车对象有一个items 属性,它是购物车中所有项目的数组。购物车中的每个 item 对象都不同于 product 对象。 product 对象有一个变体列表,购物车 item 对象没有。

这样做的目的是能够编辑购物车中商品的大小。

我的问题是,您如何才能获得所有链接的变体?您将不得不向上移动到产品并获得那里所有变体的列表,从它的变体 product_id

这很棘手的原因是,当您获得购物车对象的获取响应时,您会为购物车中的每个 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' }
      ]
    }
  ]
}

【问题讨论】:

    标签: javascript vue.js shopify liquid


    【解决方案1】:

    如果您有产品 ID 或句柄,您可以随意致电 Shopify 以获取有关产品的更多信息,例如分配给它的所有变体,以及所有选项。因此,要更改为不同的选项,您需要从购物车中删除一个变体 ID,然后添加一个不同的 ID,即您想要的那个。您可以使用 StorefrontAPI 调用来获取产品信息。这通常是商家做您需要做的事情的方式。

    【讨论】:

    • 现在我需要使用标准方式,但我同意店面 api 会使这种方式更容易。有没有办法在没有店面 api 的情况下以某种方式获取产品信息?购物车允许您发送获取请求,我将整个产品转换为 js,但仅在产品模板上。如果我在刚开始的时候就知道这一点,我就会开始使用店面 API 进行清理,而不会为 liquid 而烦恼。
    • 当您呈现购物车时,您还可以自由地呈现您需要的任何 JS,代表购物车中的产品。因此,如果您知道要在购物车本身中提供切换变体,则需要进行零次 API 调用。几乎没有人这样做,但这并不意味着你不能。
    【解决方案2】:

    经过一整天的斗争,我终于明白了。对于遇到此问题的任何其他人,您需要做这样的事情。

    来自购物车模板,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
    })();
    

    现在对于购物车中的每个项目属性,您都有它的变体。

    【讨论】:

      【解决方案3】:

      该代码应粘贴到 cart.liquid 部分的什么位置?

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2016-04-03
      • 2017-10-14
      • 2015-06-01
      • 1970-01-01
      相关资源
      最近更新 更多