O Twig é um mecanismo para criar templates em PHP. Através dele criamos todos os templates e arquivos reutilizáveis de um layout na Nuvemshop.
Nossos desenvolvedores geram código de backend, tornando possível consumi-lo por meio de objetos, variáveis e métodos no front-end.
Cada arquivo que termina na extensão ".tpl" significa que podemos usar o Twig dentro dele. (Do HTML até CSS e JS).
HTML
<ul class="footer-menu m-0 p-0">
{% for item in menus[settings.footer_menu] %}
<li class="footer-menu-item my-4">
<a class="footer-menu-link" href="{{ item.url }}" {% if item.url | is_external %}target="_blank"{% endif %}>{{ item.name }}</a>
</li>
{% endfor %}
</ul>CSS
{% if settings.theme_variant == 'squared' %}
{# /* // Square */ #}
{# /* /Components */ #}
.btn-primary{
background-size: 200% 200%;
background-image: linear-gradient(to top, $primary-color 50%, transparent 50%);
color: $primary-color;
border-bottom: 3px solid $primary-color;
@extend %body-font;
font-weight: bold;
@include prefix(transition, all 0.09s ease-in, webkit ms moz o);
&:hover{
color: $main-background;
background-image: linear-gradient(to top, $primary-color 51%, transparent 50%);
background-position: 0 100%;
}
}
{% endif %}JS
if (!variant.available){
button.val('{{ "Sin stock" | translate }}');
button.addClass('nostock');
button.attr('disabled', 'disabled');
$product_shipping_calculator.hide();
}Outra coisa que marca o Twig é tudo que encontramos entre chaves "{{ }}" ou entre chaves com o simbolo de porcentagem "{%%}".
De um simple texto
<p>{{ 'Si' | translate }}</p>Até uma condição
{% if product.display_price %}
{{ product.price | money }}
{% endif %}Como qualquer linguagem de programação, com o Twig podemos ter:
Condicionais
Para exibir ou carregar conteúdo se determinadas condições ou grupos de condições forem atendidos:
{% if condition %}
content
{% endif %}
{% if condition %}
content 1
{% else %}
content 2
{% endif %}
{% if contition1 and condition2 and condition 3 %}
content
{% endif %}
{% if contition1 or condition2 or condition 3 %}
content
{% endif %}
{% if contition1 and (condition2 or condition 3) %}
content
{% endif %}
{% if settings.video_embed %}
content
{% endif %}Também usando {% set%} podemos salvar muitas condições dentro de uma variável.
{% set mega_condition = condition1 and condition2 and condition3 %}
{% if mega_condition %}
content
{% endif %}Nós usamos condições para carregar conteúdo dependendo do template que é renderizado. No exemplo abaixo, o JavaScript é carregado apenas para detalhes do produto.
{% if template == 'product' %}
{# Facebook comment box JS #}
{% if settings.show_product_fb_comment_box %}
{{ fb_js }}
{% endif %}
{# Pinterest share button JS #}
{{ pin_js }}
{% endif %}Iterações
Podemos iterar dentro de um objeto e mostrar seu conteúdo, por exemplo dentro do objeto "navigation" para mostrar todos os "items" da navegação.
{% for item in navigation %}
{{ item.name }}
{% endfor %}
{% for item in navigation %}
{% if item.subitems %}
{{ item.name }}
{% else %}
{{ item.name }}
{% endif %}
{% endfor %}E usando "loop" entendemos em qual número de iteração para mostrar um determinado conteúdo ou alteração.
{% for item in navigation %}
{% if loop.index == 1 %}
{{ item.name }}
{% endif %}
{% endfor %}
{% for item in navigation %}
{% if loop.index >= 10 %}
{{ item.name }}
{% endif %}
{% endfor %}
{% for item in navigation %}
{% if loop.first %}
{{ item.name }}
{% endif %}
{% endfor %}
{% for item in navigation %}
{% if loop.last %}
{{ item.name }}
{% endif %}
{% endfor %}Para mais informações sobre o Twig, recomendamos a leitura de sua documentação, que é bastante completa, oferecendo um guia sobre como aplicar filtros, como fazer contas matemáticas, etc.