Twig es un motor para generar templates basado en PHP, a través del cual creamos todos los templates o archivos reutilizables de un theme en Tiendanube.
Nuestros desarrolladores generan código backend haciendo posible que podamos consumirlo a través de objetos, variables y métodos en el front end.
Cada archivo terminado en la extensión “.tpl” significa que podemos utilizar Twig dentro él, desde un HTML hasta un CSS y 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(); }
Otra cosa que marca el uso de Twig es todo lo que se encuentra entre las llaves “{{ }}” o las llaves el porcentaje “{% %}”.
Desde un simple texto
<p>{{ 'Si' | translate }}</p>
Hasta una condición
{% if product.display_price %} {{ product.price | money }} {% endif %}
Como cualquier lenguaje de programación, con Twig podemos tener:
Condicionales
Para mostrar o cargar contenido si se cumplen ciertas condiciones o grupos de condiciones:
{% 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 %}
También usando {% set %} podemos guardar muchas condiciones dentro de una variable.
{% set mega_condition = condition1 and condition2 and condition3 %} {% if mega_condition %} content {% endif %}
Incluso usamos condiciones para cargar contenido dependiendo el template que se renderiza. En el ejemplo de abajo solo se carga el JavaScript para los detalles de producto.
{% if template == 'product' %} {# Facebook comment box JS #} {% if settings.show_product_fb_comment_box %} {{ fb_js }} {% endif %} {# Pinterest share button JS #} {{ pin_js }} {% endif %}
Iteraciones
Podemos iterar dentro de un objeto y mostrar su contenido, por ejemplo dentro del objeto “navigation” para mostrar todos los “items” de la navegación.
{% for item in navigation %} {{ item.name }} {% endfor %} {% for item in navigation %} {% if item.subitems %} {{ item.name }} {% else %} {{ item.name }} {% endif %} {% endfor %}
Y usando “loop” entendemos dentro qué número de iteración mostrar un determinado contenido o cambio.
{% 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 más información sobre Twig recomendamos leer su documentación la cual es bastante completa, ofreciendo una guía de como aplicar filtros, como hacer cuentas matemáticas, etc.