Desconto sobre preços

Este tutorial explica como exibir corretamente promoções do tipo Desconto sobre preços nas lojas.

Pré-requisitos

Antes de começar a implementação, certifique-se de que a loja tenha uma promoção ativa desse tipo.

Por exemplo, na imagem a seguir foi aplicado um desconto de 10% em todos os produtos:

Uma vez configurada, a promoção pode ser exibida automaticamente em vários pontos da loja, desde que o tema contenha os componentes necessários.

Componentes necessários

Incluir o componente labels

Localização:
Arquivo: snipplets/labels.tpl

Este componente é responsável por exibir os rótulos de promoções, frete e estoque. Deve ser incluído com a seguinte configuração:

{% set label_accent_classes = 'label label-accent' %}
{% set label_default_classes = 'label label-default' %}

{{ component(
  'labels', {
    prioritize_promotion_over_offer: true,
    promotion_quantity_long_wording: true,
    promotion_nxm_long_wording: false,
    labels_classes: {
      group: 'js-labels-floating-group',
      promotion: label_accent_classes,
      promotion_primary_text: 'd-block',
      offer: 'js-offer-label ' ~ label_accent_classes,
      shipping: 'label label-secondary',
      no_stock: 'js-stock-label ' ~ label_default_classes,
    },
  })
}}

Incluir o componente promotions-details

Localização:
Arquivo: snipplets/product/product-form.tpl

Deve ser inserido após o bloco de preço do produto e antes do bloco de parcelamento e formas de pagamento.

...

{# Product price #}

<div class="price-container text-center text-md-left" data-store="product-price-{{ product.id }}">
    <span class="d-inline-block mb-2">
       <h4 id="compare_price_display" class="js-compare-price-display price-compare mb-0" {% if not product.compare_at_price or not product.display_price %}style="display:none;"{% else %} style="display:block;"{% endif %}>{% if product.compare_at_price and product.display_price %}{{ product.compare_at_price | money }}{% endif %}</h4>
    </span>
    <span class="d-inline-block">
        <h4 class="js-price-display mb-0" id="price_display" {% if not product.display_price %}style="display:none;"{% endif %} data-product-price="{{ product.price }}">{% if product.display_price %}{{ product.price | money }}{% endif %}</h4>
    </span>
    {{ component('price-without-taxes', {
            container_classes: "mb-2 font-small opacity-60",
        })
    }}
    {{ component('payment-discount-price', {
            visibility_condition: settings.payment_discount_price,
            location: 'product',
            container_classes: "h6 text-accent mb-3",
        })
    }}
</div>

{{ component('promotions-details', {
    promotions_details_classes: {
        container: 'js-product-promo-container text-center text-md-left mb-4',
        promotion_title: 'h4 mb-2 text-accent',
        valid_scopes: 'mb-0',
        categories_combinable: 'mb-0',
        not_combinable: 'font-small mb-0',
        progressive_discounts_table: 'table mb-2 mt-3',
        progressive_discounts_hidden_table: 'table-body-inverted',
        progressive_discounts_show_more_link: 'btn-link btn-link-primary mb-4',
        progressive_discounts_show_more_icon: 'icon-inline',
        progressive_discounts_hide_icon: 'icon-inline icon-flip-vertical',
        progressive_discounts_promotion_quantity: 'font-weight-light text-lowercase'
    },
    svg_sprites: false,
    custom_control_show: include("snipplets/svg/chevron-down.tpl", { svg_custom_class: "icon-inline icon-w-14 icon-md ml-2" }),
    custom_control_hide: include("snipplets/svg/chevron-up.tpl", { svg_custom_class: "icon-inline icon-w-14 icon-md ml-2" }),
}) }}

{# Product installments #}

... 

Incluir o componente cart-labels

Localização:
Arquivo: snipplets/cart-item-ajax.tpl

Inserir dentro do bloco do nome do item no carrinho:

...

{# Cart item name #}
<div class="{% if cart_page %}row align-items-center{% else %}w-100{% endif %}">
  <h6 class="font-weight-normal {% if cart_page %}col-12 col-md-6 h4-md mb-2 mb-md-0{% else %}cart-item-name mb-0{% endif %}" data-component="line-item.name">
    <a href="{{ item.url }}" data-component="name.short-name">
      {{ item.short_name }}
    </a>
    <small data-component="name.short-variant-name">{{ item.short_variant_name }}</small>
    {{ component(
      'cart-labels', {
        group: true,
        labels_classes: {
          group: 'mt-2',
          label: 'd-inline-block label label-secondary font-smallest mb-1 mr-1',
          shipping: 'label-secondary',
          promotion: 'label-accent',
        },
      })
    }}
  </h6>

...

Resultado esperado

Com essa configuração, o desconto aplicado (por exemplo, 10% OFF) será exibido corretamente:

  • Na página do produto.
  • No carrinho de compras.

Isso contribui para uma melhor comunicação das promoções ao longo de toda a experiência de compra do cliente.