Neste tutorial vamos ver como podemos adicionar banners com as seguintes particularidades:
- Imagem
- Título
- Descrição
- Texto do botão
- Link
- Alinhamento
Para o layout Base, criamos um componente exclusivo para os banners que, dependendo de onde o usamos, o mostramos de maneiras diferentes, como nos Banners de categorias e nos módulos de Imagem e texto.
Neste tutorial vamos pegar o exemplo dos banners para categorias, onde teremos 3 banners com todos os elementos que listamos acima, na mesma linha dentro do conteúdo da página inicial. E você tem uma opção geral, para configurar o componente utilizando 100% da tela, mostrando os banners sem margens laterais.
HTML
1. A primeira coisa que vamos fazer é criar a pasta home dentro da pasta snipplets e depois adicionar o snipplet home-banners.tpl com o seguinte código:
<section class="section-banners-home"> <div class="container{% if settings.banners_full %}-fluid p-0{% endif %}"> <div class="row {% if settings.banners_full %}no-gutters{% endif %} align-items-center"> {% set num_banners = 0 %} {% for banner in ['banner_01', 'banner_02', 'banner_03'] %} {% set banner_show = attribute(settings,"#{banner}_show") %} {% set banner_title = attribute(settings,"#{banner}_title") %} {% set banner_button_text = attribute(settings,"#{banner}_button") %} {% set has_banner = banner_show and (banner_title or banner_description or "#{banner}.jpg" | has_custom_image) %} {% if has_banner %} {% set num_banners = num_banners + 1 %} {% endif %} {% endfor %} {% for banner in ['banner_01', 'banner_02', 'banner_03'] %} {% set banner_show = attribute(settings,"#{banner}_show") %} {% set banner_title = attribute(settings,"#{banner}_title") %} {% set banner_description = attribute(settings,"#{banner}_description") %} {% set banner_button_text = attribute(settings,"#{banner}_button") %} {% set banner_url = attribute(settings,"#{banner}_url") %} {% set has_banner = banner_show and (banner_title or banner_description or "#{banner}.jpg" | has_custom_image) %} {% set has_banner_text = banner_title or banner_description or banner_button_text %} {% if has_banner %} <div class="col-md"> <div class="textbanner"> {% if banner_url %} <a class="textbanner-link" href="{{ banner_url }}"{% if banner_title %} title="{{ banner_title }}" aria-label="{{ banner_title }}"{% else %} title="{{ 'Banner de' | translate }} {{ store.name }}" aria-label="{{ 'Banner de' | translate }} {{ store.name }}"{% endif %}> {% endif %} {% if store.thumbnails_enabled %} <div class="textbanner-image{% if has_banner_text and textoverimage %} overlay{% endif %} lazyautosizes lazyload blur-up"{% if "#{banner}.jpg" | has_custom_image %} data-bgset='{{ "#{banner}.jpg" | static_url | settings_image_url('large') }} 480w, {{ "#{banner}.jpg" | static_url | settings_image_url('huge') }} 640w' data-sizes="auto" style="background-image: url({{ "#{banner}.jpg" | static_url | settings_image_url('tiny') }});"{% endif %}> {% else %} <div class="textbanner-image{% if has_banner_text and textoverimage %} overlay{% endif %} lazyload blur-up"{% if "#{banner}.jpg" | has_custom_image %} data-bg='{{ "#{banner}.jpg" | static_url }}' style="background-image: url({{ "#{banner}.jpg" | static_url | settings_image_url('tiny') }});" {% endif %}> {% endif %} </div> <div class="textbanner-text{% if textoverimage %} over-image{% endif %}"> {% if banner_title %} <div class="h1 textbanner-title">{{ banner_title }}</div> {% endif %} {% if banner_description %} <div class="textbanner-paragraph">{{ banner_description }}</div> {% endif %} {% if banner_url and banner_button_text %} <button class="btn btn-line btn-small">{{ banner_button_text }}</button> {% endif %} </div> {% if banner_url %} </a> {% endif %} </div> </div> {% endif %} {% endfor %} </div> </div> </section>
Onde criamos um loop para construir os banners um por um, dependendo da informação que cada um possui. No caso de criar outros com nomes diferentes (neste exemplo são chamados: banner_01, banner_02 e banner_03), podemos modificá-los a partir do for que os define:
{% for banner in ['banner_01', 'banner_02', 'banner_03'] %}
2. E então precisamos chamar o snipplet do banner no template templates/home.tpl, no local que você preferir dentro do seu layout.
{% include 'snipplets/home/home-banners.tpl' %}
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).
1. 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, mas se não for o caso, você poderá unificar o CSS dos passos 1 e 2 em um único arquivo.
{# /* // Home banners */ #} .textbanner { position: relative; margin-bottom: 20px; overflow: hidden; } .textbanner-link { display: block; width: 100%; height: 100%; } .textbanner-image { position: relative; padding-top: 100%; background-position: center; background-repeat: no-repeat; background-size: cover; } .textbanner-text { position: relative; padding: 0 5% 45px 5%; text-align: center; } .textbanner-text.over-image { position: absolute; top: 50%; left: 50%; z-index: 9; width: 100%; color: #fff; transform: translate(-50%, -50%); } .textbanner-title { margin-bottom: 15px; line-height: 34px; } .textbanner-paragraph { display: -webkit-box; margin-bottom: 15px; line-height: 18px; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } {# /* // Min width 768px */ #} @media (min-width: 768px) { {# /* //// Banners */ #} {# /* Home Banners */ #} .textbanner-text { padding: 30px 20%; } }
2. Adicione os estilos dentro do arquivo static/style-async.tpl
Se em seu layout você usar um stylesheet CSS assíncrono, precisaremos do seguinte código, caso não seja possível unificá-lo com na etapa anterior.
{# /* // Mixins */ #} {# This mixin adds browser prefixes to a CSS property #} @mixin prefix($property, $value, $prefixes: ()) { @each $prefix in $prefixes { #{'-' + $prefix + '-' + $property}: $value; } #{$property}: $value; } {# /* // Banners */ #} .textbanner { .textbanner-image.overlay { @include prefix(transition, all 0.8s ease, webkit ms moz o); } &:hover .textbanner-image.overlay, &:focus .textbanner-image.overlay { @include prefix(transform, scale(1.03), webkit ms moz o); } }
3. Adicionamos o seguinte SASS de cores em style-colors.scss.tpl (ou no 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:
{# This mixin adds browser prefixes to a CSS property #} @mixin prefix($property, $value, $prefixes: ()) { @each $prefix in $prefixes { #{'-' + $prefix + '-' + $property}: $value; } #{$property}: $value; } {# /* // Buttons */ #} .btn{ text-decoration: none; text-align: center; border: 0; cursor: pointer; -webkit-appearance: none; -moz-appearance: none; appearance: none; text-transform: uppercase; background: none; @include prefix(transition, all 0.4s ease, webkit ms moz o); &:hover, &:focus{ outline: 0; opacity: 0.8; } &[disabled], &[disabled]:hover{ opacity: 0.5; cursor: not-allowed; outline: 0; } &-default{ padding: 10px 15px; background-color: rgba($main-foreground, .2); color: $main-foreground; fill: $main-foreground; font-weight: bold; } &-block{ float: left; width: 100%; } &-small{ display: inline-block; padding: 10px; font-size: 10px; letter-spacing: 2px; } &-line{ padding: 10px 0; color: $main-background; fill: $main-background; letter-spacing: 4px; border-bottom: 2px solid; } }
JS
Como neste tutorial usamos a técnica de lazy load com o plugin Lazysizes, precisamos adicioná-lo. Para ver como fazer isso, você pode ler este pequeno artigo e continuar com este tutorial.
Configurações
No arquivo config/settings.txt, adicionaremos todos os campos dos 3 banners com suas características. Vamos adicioná-los na seção Página inicial.
collapse title = Banners de categorías description description = Los banners se mostrarán de izquierda a derecha en computadoras y de arriba hacia abajo en celulares checkbox name = banners_full description = Mostrar banner a todo el ancho de la pantalla en computadoras subtitle subtitle = CATEGORÍA 1 checkbox name = banner_01_show description = Mostrar banner image original = banner_01.jpg title = Cargar imagen (JPG, GIF, PNG) width = 600 height = 600 i18n_input name = banner_01_title description = Título i18n_input name = banner_01_description description = Descripción i18n_input name = banner_01_button description = Texto del botón i18n_input name = banner_01_url description = Link dropdown name = banner_01_align description = Alineación del texto values left = Izquierda center = Centrado right = Derecha subtitle subtitle = CATEGORÍA 2 checkbox name = banner_02_show description = Mostrar banner image original = banner_02.jpg title = Cargar imagen (JPG, GIF, PNG) width = 600 height = 600 i18n_input name = banner_02_title description = Título i18n_input name = banner_02_description description = Descripción i18n_input name = banner_02_button description = Texto del botón i18n_input name = banner_02_url description = Link dropdown name = banner_02_align description = Alineación del texto values left = Izquierda center = Centrado right = Derecha subtitle subtitle = CATEGORÍA 3 checkbox name = banner_03_show description = Mostrar banner image original = banner_03.jpg title = Cargar imagen (JPG, GIF, PNG) width = 600 height = 600 i18n_input name = banner_03_title description = Título i18n_input name = banner_03_description description = Descripción i18n_input name = banner_03_button description = Texto del botón i18n_input name = banner_03_url description = Link dropdown name = banner_03_align description = Alineación del texto values left = Izquierda center = Centrado right = Derecha
Traduções
Nesta etapa, adicionamos os textos para as traduções no arquivo config/translations.txt.
es "Los banners se mostrarán de izquierda a derecha en computadoras y de arriba hacia abajo en celulares" pt "Os banners serão exibidos da esquerda para a direita em computadores, e de cima para baixo em celulares." en "Banners will be displayed from left to right on desktop and from top to bottom on mobile" es "Banners de categorías" pt "Banners de categorias" en "Categories banners" es_mx "Banners de categorías" es "CATEGORÍA 1" pt "CATEGORIA 1" en "CATEGORY 1" es_mx "CATEGORÍA 1" es "CATEGORÍA 2" pt "CATEGORIA 2" en "CATEGORY 2" es_mx "CATEGORÍA 2" es "CATEGORÍA 3" pt "CATEGORIA 3" en "CATEGORY 3" es_mx "CATEGORÍA 3" es "Mostrar banner" pt "Mostrar banner" en "Show banner" es_mx "Mostrar el banner" es "Imagen de fondo" pt "Imagem de fundo" en "Background image" es_mx "Imagen de fondo" es "Cargar imagen (JPG, GIF, PNG)" pt "Carregar imagem (JPG, GIF, PNG)" en "Upload image (JPG, GIF, PNG)" es_mx "Cargar imagen (JPG, GIF, PNG)" 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 "Texto del botón" pt "Texto do botão" en "Button text" es_mx "Texto del botón" es "Link" pt "Link" en "Link" es_mx "Link" es "Alineación del texto" pt "Alinhamento do texto" en "Text align" es_mx "Alineación del texto" es "Izquierda" pt "Esquerda" en "Left" es_mx "Izquierda" es "Centrado" pt "Centralizado" en "Center" es_mx "Centrado" es "Derecha" pt "Direita" en "Right" es "Derecha"
Ativação
Por último, você pode ativar o vídeo no Administrador Nuvem, na seção ‘Personalizar seu layout atual’ dentro de ‘Página inicial’: