Neste tutorial, implementaremos a promoção de brinde no carrinho.
HTML
1. Modificaremos o snippet chamado snipplets/cart-panel.tpl. Neste arquivo, utilizaremos o componente privado gift-promotion-progress antes da barra de progresso do frete, para que possamos exibir a nova barra de progresso do brinde.
O código correspondente é o seguinte:
{% set gift_progress_parameters = {
svg_sprites: false,
progress_bar_custom_icon: include('snipplets/svg/gift.tpl', {svg_custom_class: 'progress-bar-icon icon-inline icon-w-18 icon-lg svg-icon-accent'}),
show_check: false,
progress_bar_classes: {
container: 'progress-bar',
title_container: 'progress-bar-title-container',
title: 'progress-bar-title text-accent h6',
subtitle: 'progress-bar-subtitle opacity-50',
track: 'bar-progress',
fill: 'bar-progress-active transition-soft',
}
} %}
{{ component('gift-promotion-progress', gift_progress_parameters) }}Também adicionamos os componentes que utilizamos:
snipplets/svg/gift.tpl
<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M464 144h-26.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H48c-26.5 0-48 21.5-48 48v128c0 8.8 7.2 16 16 16h16v136c0 22.1 17.9 40 40 40h368c22.1 0 40-17.9 40-40V336h16c8.8 0 16-7.2 16-16V192c0-26.5-21.5-48-48-48zM360 64c30.9 0 56 25.1 56 56s-25.1 56-56 56h-59.6c31.3-45.5 49.4-112 59.6-112zM152 64c10.3 0 28.4 66.5 59.6 112H152c-30.9 0-56-25.1-56-56s25.1-56 56-56zM32 192c0-8.8 7.2-16 16-16h176v128H32V192zm32 160h144v128H72c-4.4 0-8-3.6-8-8V352zm376 128H288V352h160v128c0 4.4-3.6 8-8 8zm40-176H288V176h176c8.8 0 16 7.2 16 16v112z"/></svg>2. Também modificaremos o snippet snipplets/forms/form-input.tpl para permitir desabilitar os campos de entrada de quantidade do brinde; faremos a seguinte alteração:
<div class="form-group {{ input_group_custom_class }} {% if input_disabled %}form-control-disabled{% endif %}">E no componente de input:
<input {% if input_disabled %}disabled{% endif %} ... >3. Prosseguiremos com as alterações no arquivo snipplets/cart-item-ajax.tpl para indicar que o produto é um brinde.
Primeiro, definimos a variável is_gift
{% set is_gift = item.is_gift %}Adicionamos o atributo data-gift à div js-cart-item:
<div class="js-cart-item ..." data-gift="{{ is_gift ? 'true' : 'false' }}" ... />Adicionamos o rótulo de brinde abaixo do nome do produto:
{% if is_gift %}
<div class="text-accent font-smallest font-weight-bold text-uppercase my-2">
{{ "Regalo" | translate }}
</div>
{% endif %}Adicionamos o atributo input_disabled ao componente form-input da etapa anterior:
{% embed "snipplets/forms/form-input.tpl" with {
input_disabled: is_gift,
...
} %}Substituímos o componente de div js-cart-item-subtotal-compare-price-container existente pelo seguinte, caso se trate de um brinde:
{% if is_gift %}
<div class="price-compare font-small opacity-50">{{ item.compare_at_price_subtotal | money }}</div>
<h6 class="{% if cart_page %}h4-md font-weight-bold{% endif %} mt-1 mb-0">{{ "Gratis" | translate }}</h6>
{% else %}
<div class="js-cart-item-subtotal-compare-price-container" > ... <div />
<h6 class="js-cart-item-subtotal ..." ...> ... <h6 />
{% endif %}E, finalmente, ocultamos o botão de exclusão para que o brinde não possa ser removido:
button type="button" class="... {% if is_gift %}hidden{% endif %}" ... data-component="line-item.remove">CSS
Requisito:
1. Para que os estilos sejam aplicados corretamente, eles devem ser inseridos no local adequado. Todas as alterações serão feitas no arquivo static/css/style-async.scss.tpl.
Adicionamos o seguinte css
.progress-bar {
display: flex;
flex-direction: column;
gap: 10px;
}
.progress-bar-title-container {
display: flex;
align-items: center;
gap: 8px;
}
.progress-bar-title {
flex: 1;
min-width: 0;
}
.progress-bar-icon {
flex-shrink: 0;
}
.progress-bar-subtitle {
font-size: var(--font-small);
}
.progress-bar-subtitle:not(:has(> :not([style*="display: none"]))) {
display: none;
}
.gift-promotion-progress {
margin-top: 8px;
margin-bottom: 16px;
}
.form-control-disabled {
opacity: 0.3;
pointer-events: none;
}Traduções
Nesta etapa, adicionamos os textos para tradução no arquivo config/translations.txt:
es "Regalo" pt "Brinde" en "Gift" es_mx "Regalo"
Ativação
Para ativar a funcionalidade, acesse o painel administrativo da loja e vá para a seção Descuentos > Promociones. Em seguida, crie uma nova promoção, configure os parâmetros conforme necessário e salve as alterações.
