Banners informativos

Neste tutorial vamos adicionar banners informativos, basicamente eles são banners que contêm:

  • Um ícone
  • Um título
  • Um texto
  • Um link (opcional)

Temos um total de 7 banners para mensagens diferentes:

  • Frete
  • Cartões de crédito
  • Segurança
  • Trocas e Devoluções
  • WhatsApp
  • Promoções
  • Boleto Bancário

Dependendo do número de banners definidos no Administrador nuvem na seção Personalizar seu design atual, eles serão exibidos em um slider ou não.

HTML

A primeira coisa que vamos fazer é criar a pasta banner-services dentro da pasta snipplets.

1. Dentro da pasta criada, adicionamos os seguintes snipplets.

banner-services.tpl

Contém o componente pai dos banners, que inclui o for o qual itera sobre cada banner configurado e o inclui.

Aqui, as variáveis para a propriedade de cada banner também são salvas usando um {% set%} de twig.

{% macro for_each_banner_include(template) %}
    {% set num_banners_services = 0 %}
    {% set available_banners = []%}
    {% for banner in ['banner_services_01', 'banner_services_02', 'banner_services_03'] %}
        {% set banner_services_icon = attribute(settings,"#{banner}_icon") %}
        {% set banner_services_title = attribute(settings,"#{banner}_title") %}
        {% set banner_services_description = attribute(settings,"#{banner}_description") %}
        {% set banner_services_url = attribute(settings,"#{banner}_url") %}
        {% set has_banner_services =  banner_services_title or banner_services_description %}
        {% if has_banner_services %}
            {% set num_banners_services = num_banners_services + 1 %}
            {% set available_banners = available_banners | merge([banner]) %}
        {% endif %}
    {% endfor %}
    {% for banner in available_banners %}
        {% set banner_services_title = attribute(settings,"#{banner}_title") %}
        {% set banner_services_icon = attribute(settings,"#{banner}_icon") %}
        {% set banner_services_description = attribute(settings,"#{banner}_description") %}
        {% set banner_services_url = attribute(settings,"#{banner}_url") %}
        {% include template %}
    {% endfor %}
{% endmacro %}
{% import _self as banner_services %}
{% if settings.banner_services %}
    <section class="section-informative-banners">
        <div class="container">
            <div class="row">
                <div class="js-informative-banners swiper-container">
                    <div class="swiper-wrapper">
                        {{ banner_services.for_each_banner_include('snipplets/banner-services/banner-services-item.tpl') }}
                    </div>
                    <div class="js-informative-banners-pagination service-pagination swiper-pagination swiper-pagination-black"></div>
                </div>
            </div>
        </div>
    </section>
{% endif %}

banner-services-item.tpl

Como o nome indica, é o item de cada banner incluído no banner-services.tpl, aplicando o ícone correspondente, dependendo do que está configurado no Administrador nuvem.

<div class="service-item-container col-md swiper-slide p-0 px-md-3">
    <div class="service-item row justify-content-md-center text-md-left">
        
        <div class="col-md-auto">
            {% if banner_services_icon == 'shipping' %}
                {% include "snipplets/svg/truck.tpl" with {svg_custom_class: "icon-inline icon-w-20 icon-2x service-icon"} %}
            {% elseif banner_services_icon == 'card' %}
                {% include "snipplets/svg/credit-card-blank.tpl" with {svg_custom_class: "icon-inline icon-w-18 icon-2x service-icon"} %}
            {% elseif banner_services_icon == 'security' %}
                {% include "snipplets/svg/lock.tpl" with {svg_custom_class: "icon-inline icon-w-14 icon-2x service-icon"} %}
            {% elseif banner_services_icon == 'returns' %}
                {% include "snipplets/svg/sync-alt.tpl" with {svg_custom_class: "icon-inline icon-w-16 icon-2x service-icon"} %}
            {% elseif banner_services_icon == 'whatsapp' %}
                {% include "snipplets/svg/whatsapp.tpl" with {svg_custom_class: "icon-inline icon-w-16 icon-2x service-icon service-icon-big"} %}
            {% elseif banner_services_icon == 'promotions' %}
                {% include "snipplets/svg/tag.tpl" with {svg_custom_class: "icon-inline icon-w-16 icon-2x service-icon"} %}
            {% elseif banner_services_icon == 'cash' %}
                {% include "snipplets/svg/dollar-sign.tpl" with {svg_custom_class: "icon-inline icon-w-9 icon-2x service-icon"} %}
            {% endif %}
        </div>
        <div class="col">
            {% if banner_services_url %}
                <a href="{{ banner_services_url }}">
            {% endif %}
            <h3 class="service-title">{{ banner_services_title }}</h3>
            <p>{{ banner_services_description }}</p>
            {% if banner_services_url %}
                </a>
            {% endif %}
        </div>
    </div>
</div>

2. Neste caso, queremos mostrar o banner na página inicial, por isso, adicionamos a chamada ao banner-services.tpl dentro do templates/home.tpl.

Vale ressaltar que é uma funcionalidade opcional, portanto dependerá do fato de ela estar ativada ou não, na tela Personalizar seu design atual no Administrador nuvem.

{% include 'snipplets/banner-services/banner-services.tpl' %}

3. Finalmente, para a parte HTML, precisamos adicionar uma pasta SVG dentro da pasta snipplets. Aqui vamos adicionar os SVGs que usamos para os ícones.

truck.tpl

<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M624 368h-16V251.9c0-19-7.7-37.5-21.1-50.9L503 117.1C489.6 103.7 471 96 452.1 96H416V56c0-30.9-25.1-56-56-56H56C25.1 0 0 25.1 0 56v304c0 30.9 25.1 56 56 56h8c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-464 96c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm208-96H242.7c-16.6-28.6-47.2-48-82.7-48s-66.1 19.4-82.7 48H56c-4.4 0-8-3.6-8-8V56c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v312zm48-224h36.1c6.3 0 12.5 2.6 17 7l73 73H416v-80zm64 320c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-100.9c-17.2-25.9-46.6-43.1-80-43.1-24.7 0-47 9.6-64 24.9V272h144v91.1z"/></svg>

credit-card-blank.tpl

<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zm-6 400H54.1c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h467.8c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6zM192 364v8c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v8c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z"/></svg>

lock.tpl

<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M400 192h-32v-46.6C368 65.8 304 .2 224.4 0 144.8-.2 80 64.5 80 144v48H48c-26.5 0-48 21.5-48 48v224c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V240c0-26.5-21.5-48-48-48zm-272-48c0-52.9 43.1-96 96-96s96 43.1 96 96v48H128v-48zm272 320H48V240h352v224z"/></svg>

whatsapp.tpl

<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"/></svg>

sync-alt.tpl

<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M483.515 28.485L431.35 80.65C386.475 35.767 324.485 8 256 8 123.228 8 14.824 112.338 8.31 243.493 7.971 250.311 13.475 256 20.301 256h28.045c6.353 0 11.613-4.952 11.973-11.294C66.161 141.649 151.453 60 256 60c54.163 0 103.157 21.923 138.614 57.386l-54.128 54.129c-7.56 7.56-2.206 20.485 8.485 20.485H492c6.627 0 12-5.373 12-12V36.971c0-10.691-12.926-16.045-20.485-8.486zM491.699 256h-28.045c-6.353 0-11.613 4.952-11.973 11.294C445.839 370.351 360.547 452 256 452c-54.163 0-103.157-21.923-138.614-57.386l54.128-54.129c7.56-7.56 2.206-20.485-8.485-20.485H20c-6.627 0-12 5.373-12 12v143.029c0 10.691 12.926 16.045 20.485 8.485L80.65 431.35C125.525 476.233 187.516 504 256 504c132.773 0 241.176-104.338 247.69-235.493.339-6.818-5.165-12.507-11.991-12.507z"/></svg>

tag.tpl

<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a47.998 47.998 0 0 0 14.059 33.941l211.882 211.882c18.745 18.745 49.137 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM259.886 463.996L48 252.118V48h204.118L464 259.882 259.886 463.996zM192 144c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48z"/></svg>

dollar-sign.tpl

<svg class="{{ svg_custom_class }}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 288 512"><path d="M211.9 242.1L95.6 208.9c-15.8-4.5-28.6-17.2-31.1-33.5C60.6 150 80.3 128 105 128h73.8c15.9 0 31.5 5 44.4 14.1 6.4 4.5 15 3.8 20.5-1.7l22.9-22.9c6.8-6.8 6.1-18.2-1.5-24.1C240.4 74.3 210.4 64 178.8 64H176V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C60.3 64 14.9 95.8 3.1 143.6c-13.9 56.2 20.2 111.2 73 126.3l116.3 33.2c15.8 4.5 28.6 17.2 31.1 33.5C227.4 362 207.7 384 183 384h-73.8c-15.9 0-31.5-5-44.4-14.1-6.4-4.5-15-3.8-20.5 1.7l-22.9 22.9c-6.8 6.8-6.1 18.2 1.5 24.1 24.6 19.1 54.6 29.4 86.3 29.4h2.8v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h2.5c49.2 0 94.6-31.8 106.4-79.6 13.9-56.2-20.2-111.2-73-126.3z"/></svg>

CSS

Requisito:

Ter adicionado helper classes em seu layout. Você pode seguir este pequeno tutorial para fazer isso (é só copiar e colar algumas classes, não leva mais que 1 minuto).

Como neste exemplo usamos um slider com o Swiper, precisamos adicionar o plugin. Para ver como fazer isso, você pode ler este pequeno artigo e continuar com este tutorial.

1. Adicionamos o seguinte SASS de cores em style-colors.scss.tpl (ou na stylesheet do seu layout que possui as cores e fontes da loja). Lembre-se de que as variáveis de cores e fontes podem variar em relação ao seu layout:

{# /* // Informative banners */ #}

.service-icon {
  fill: $main-foreground;
}

2. Adicione os estilos no arquivo static/style-critical.tpl

Se em seu layout você usar um stylesheet para o CSS crítico, precisaremos do seguinte código dentro dele, do contrário, você pode unificar o CSS dos passos 2 e 3 em um único arquivo.

{# /* // Informative banners */ #}

.section-informative-banners {
  padding: 50px 0;
  text-align: center;
}

.service-icon {
  margin: 10px 0;
}

.service-item .service-icon-big {
  font-size: 30px;
}

.service-title {
  margin: 0 0 5px 0;
}

.service-pagination {
  position: relative;
  margin-top: 5px;
}

JS

⚠️ A partir do dia 30 de janeiro de 2023, a biblioteca jQuery será removida do código de nossas lojas, portanto, a função "$" não poderá ser utilizada.

JavaScript precisam ser adicionados no arquivo store.js.tpl (ou onde você tem suas funções JS). O código que precisamos é o seguinte:

{% set has_banner_services = settings.banner_services %}

    {% if has_banner_services %}

        {# /* // Banner services slider */ #}

        var width = window.innerWidth;
        if (width < 767) {   
            var swiperInformative = new Swiper ('.js-informative-banners', {
                pagination: {
                    el: '.js-informative-banners-pagination',
                    clickable: true,
                },
            });
        }

    {% endif %}

Configurações

No arquivo config/settings.txt adicionaremos a checkbox para ativar ou desativar banners, como os campos para adicionar textos e links; tudo a partir da seção Personalizar seu design atual no Administrador nuvem

    collapse
        title = Banners informativos
    checkbox
        name = banner_services
        description = Mostrar los banners en la página principal
    subtitle
        subtitle = BANNER 1
    dropdown
        name = banner_services_01_icon
        description = Ícono
        values
            shipping = Envíos
            card = Tarjetas de crédito
            security = Seguridad
            returns = Cambios y devoluciones
            whatsapp = WhatsApp
            promotions = Promociones
            cash = Pago en efectivo
    i18n_input
        name = banner_services_01_title
        description = Título
    i18n_input
        name = banner_services_01_description
        description = Descripción
    i18n_input
        name = banner_services_01_url
        description = Link
    subtitle
        subtitle = BANNER 2
    dropdown
        name = banner_services_02_icon
        description = Ícono
        values
            shipping = Envíos
            card = Tarjetas de crédito
            security = Seguridad
            returns = Cambios y devoluciones
            whatsapp = WhatsApp
            promotions = Promociones
            cash = Pago en efectivo
    i18n_input
        name = banner_services_02_title
        description = Título
    i18n_input
        name = banner_services_02_description
        description = Descripción
    i18n_input
        name = banner_services_02_url
        description = Link
    subtitle
        subtitle = BANNER 3
    dropdown
        name = banner_services_03_icon
        description = Ícono
        values
            shipping = Envíos
            card = Tarjetas de crédito
            security = Seguridad
            returns = Cambios y devoluciones
            whatsapp = WhatsApp
            promotions = Promociones
            cash = Pago en efectivo
    i18n_input
        name = banner_services_03_title
        description = Título
    i18n_input
        name = banner_services_03_description
        description = Descripción
    i18n_input
        name = banner_services_03_url
        description = Link

Traduções

Nesta etapa, adicionamos os textos para as traduções no arquivo config/translations.txt

es "Banners informativos"
pt "Banners informativos"
en "Services banner"
es_mx "Banners informativos"

es "Ubicación de los banners"
pt "Posicionamento dos banners"
es_mx "Ubicación de los banners"

es "Mostrar los banners en toda la tienda (se verá arriba del footer)"
pt "Mostrar os banners em toda loja (aparecerá acima do rodapé)"
en "Enable services banner thought the entire site (it will appear over the footer"
es_mx "Mostrar los banners en todo el sitio (se verán encima del footer)"

es "Mostrar los banners en la página principal"
pt "Mostrar os banners na home"
en "Enable services in the home page"
es_mx "Mostrar los banners en la página principal"

es "Mostrar los banners solo en la página principal (se verá debajo del carrusel)"
pt "Mostrar os banners somente na home (aparecerá abaixo do banner rotativo)"
en "Enable services only in the home page (it will appear under the slider)"
es_mx "Mostrar los banners en la página principal (se verán debajo del carrusel)"


es "Mostrar los banners en el listado de productos (se verán arriba de los mismos en una computadora, y debajo de ellos en celulares)"
pt "Mostrar os banners na lista de produtos (serão vistos acima dos mesmos no computador, e abaixo deles em celulares)"
en "Enable services banner in the product category page (it will appear over the products on desktop and below them on mobile)"
es_mx "Mostrar los banners en el listado de productos (se verán encima de los mismos en computadoras y debajo de ellos en celulares)"

es "Título"
pt "Título"
en "Title"
es_mx "Título"

es "Descripción"
pt "Descrição"
en "Description"
es_mx "Descripción"

es "Link"
pt "Link"
en "Link"
es_mx "Link"

es "Ícono"
pt "Ícone"
en "Icon"
es_mx "Ícono"

es "Envíos"
pt "Frete"
en "Shipping"
es_mx "Envíos"

es "Seguridad"
pt "Segurança"
en "Security"
es_mx "Seguridad"

es "Cambios y devoluciones"
pt "Trocas e devoluções"
en "Returns & Exchanges"
es_mx "Cambios y devoluciones"

es "Promociones"
pt "Promoções"
en "Promotions"
es_mx "Promociones"

es "Pago en efectivo"
pt "Boleto Bancário"
en "Cash"
es_mx "Pago en efectivo"

es "Tarjetas de crédito"
pt "Cartões de crédito"
en "Credit cards"
es_mx "Tarjetas de crédito"

Ativação

Por fim, para ativar esses banners, você pode fazer isso no Administrador nuvem, na seção Personalizar seu design atual na Página inicial > Banners informativos:


Pronto, você já tem em seu design a funcionalidade aplicada.