Как отображать только доступные цены на варианты продуктов в обзоре продуктов

#shopify

#Shopify

Вопрос:

Я хотел бы отобразить самую низкую цену из доступных / имеющихся в наличии вариантов продуктов вместо «От» самая низкая цена всех вариантов продуктов, даже если их нет в наличии. Я использую тему Prestige, какие-либо подсказки о том, как я мог бы этого добиться?

Если я прав, я нашел следующую часть кода в product-item.liquid, которая отображает цену, а также отображается на страницах flickity carousel и products overview:

 <div class="ProductItem__PriceList {% if show_price_on_hover %}ProductItem__PriceList--showOnHover{% endif %} Heading">
        {%- if product.compare_at_price > product.price -%}
          <span class="ProductItem__Price Price Price--highlight Text--subdued">{{ product.price | money_without_trailing_zeros }}</span>
          <span class="ProductItem__Price Price Price--compareAt Text--subdued">{{ product.compare_at_price | money_without_trailing_zeros }}</span>
        {%- elsif product.price_varies -%}
          {%- capture formatted_min_price -%}{{ product.price_min | money_without_trailing_zeros }}{%- endcapture -%}
          {%- capture formatted_max_price -%}{{ product.price_max | money_without_trailing_zeros }}{%- endcapture -%}
          <span class="ProductItem__Price Price Text--subdued">{{ 'collection.product.from_price_html' | t: min_price: formatted_min_price, max_price: formatted_max_price }}</span>
        {%- else -%}
          <span class="ProductItem__Price Price Text--subdued">{{ product.price | money_without_trailing_zeros }}</span>
        {%- endif -%}
      </div>

      {%- if product.selected_or_first_available_variant.unit_price_measurement -%}
        <div class="ProductItem__UnitPriceMeasurement">
          <div class="UnitPriceMeasurement Heading Text--subdued">
            <span class="UnitPriceMeasurement__Price">{{ product.selected_or_first_available_variant.unit_price | money_without_trailing_zeros }}</span>
            <span class="UnitPriceMeasurement__Separator">/ </span>

            {%- if product.selected_or_first_available_variant.unit_price_measurement.reference_value != 1 -%}
              <span class="UnitPriceMeasurement__ReferenceValue">{{ product.selected_or_first_available_variant.unit_price_measurement.reference_value }}</span>
            {%- endif -%}

            <span class="UnitPriceMeasurement__ReferenceUnit">{{ product.selected_or_first_available_variant.unit_price_measurement.reference_unit }}</span>
          </div>
        </div>
      {%- endif -%}
 

Я попытался использовать следующий код из Shopify-Blog https://www.shopify.com/partners/blog/collection-page-price-range

 {% if available %}
  {% if product.price_varies and template == 'collection' %}
    From {{ product.price_min | money }} to {{ product.price_max | money }} 
  {% else %}
    {{ money_price }}
  {% endif %}
{% else %}
  {{ 'products.product.sold_out' | t }}
{% endif %}
 

Однако этот код отображает продукт как распроданный.

Ответ №1:

Будет лучше, если вы установите product_pricetocompare значение первого варианта. Это проверит, есть ли вариант. Если варианта нет, вы увидите 999999, что не очень хорошо.

пример:

 {% for variant in product.variants %}
  {% if forloop.index == 1 %}
     {% assign product_pricetocompare = variant.price %}
  {% else %}
    {% if variant.available %}
      {% if variant.price < product_pricetocompare %}
        {% assign product_pricetocompare = variant.price %}
      {% endif %}
    {% endif %}
  {% endif %}
{% endfor %}
 

Ответ №2:

Хорошо, я нашел ответ, может быть, это поможет и кому-то другому. Просмотрите варианты и проверьте, доступен ли вариант, и сохраните самую низкую цену:

 {% assign product_pricetocompare = 999999 %}
        {% for variant in product.variants %}
          {% if variant.available %}
            {% if variant.price < product_pricetocompare %}
              {% assign product_pricetocompare = variant.price %}
            {% endif %}
          {% endif %}
        {% endfor %}