Показать элементы в коллекции, которых нет в корзине Shopify - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь перебирать товары в корзине и генерировать дивиденды с товарами, которых нет в корзине. Ниже приведен код, который у меня есть, но я сталкиваюсь с проблемами при добавлении двух товаров в корзину, где дважды запускается l oop, а дважды html. Есть идеи, как это решить? Я в замешательстве.

{% for item in cart.items %} // iterates over items in cart

  {% if item.product.id == 4456879040188 %} // checks if product id matches in item in cart
    <div class="upsell-pop" style="text-align:center; width: 100%;">
      <h4>Frequently bought together</h4>
      {% for prod in collections.upsell.products %} // iterates products in collection upsell
        {% unless prod.handle contains "product-name" %} // shows only prods that do not contain url handle
            <div>
              <span class="upsell-title">{{ prod.title }}</span>
              <span class="upsell-price">{{ prod.metafields["meta"]["promo"] }} {{ prod.price | money }}</span>
              <a href="{{prod.url}}"><img src="{{ prod.featured_image | img_url: '200x' }}" /></a>
              <a class="btn-product" href="{{prod.url}}">View Product</a>
            </div>
        {% endunless %}
      {% endfor %}
    </div>
  {% endif %}

{% endfor %}

Другая мысль состоит в том, чтобы как-то проверить, не находится ли товар в корзине, чтобы заменить существующее утверждение «если», но не уверен, как его кодировать.

{% unless cart.items exist then %} // I know this is not correct syntax
     <div>
          <span class="upsell-title">{{ prod.title }}</span>
          <span class="upsell-price">{{ prod.metafields["meta"]["promo"] }} {{ prod.price | money }}</span>
          <a href="{{prod.url}}"><img src="{{ prod.featured_image | img_url: '200x' }}" /></a>
          <a class="btn-product" href="{{prod.url}}">View Product</a>
      </div>
{% endunless %}

1 Ответ

0 голосов
/ 29 января 2020

На мой взгляд, здесь есть два шага.

Во-первых, запишите содержимое вашей корзины, чтобы получить строку для сравнения с тем, когда вы oop прошли через свою коллекцию upsell. Это может быть что-то вроде этого:

{%- capture cart_items -%}
  {% for item in cart.items %}
    {{ item.product.handle }}{% unless forloop.last %} , {% endunless %}
  {% endfor %}
{%- endcapture -%}

Затем l oop в вашей коллекции при проверке вашей строки не содержит дескриптор текущего продукта на каждой итерации:

{% for product in collections['upsell'].products %}
  {% unless cart_items contains product.handle %}
    {{ product.title }}
  {% endunless %}
{% endfor %}

Примечания:

Фрагмент 1 => В объекте line_item (здесь он называется item, потому что короче писать) вы можете получить доступ к атрибутам объекта продукта: item.product.product_attr_needed

Snippet 2 => Для прямого доступа объект коллекции, используя его дескриптор, вы должны использовать коллекции + квадратные скобки, содержащие дескриптор коллекции + атрибут. Здесь «upsell» - ручка вашей коллекции upsell.

Не проверено, но это должно работать.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...