Skip to main content
O Tema Rocket é construído sobre três tecnologias que trabalham em camadas complementares. Entender o papel de cada uma é fundamental para fazer qualquer personalização no Editor de Código.
Twig é uma linguagem de templates server-side: você escreve HTML com marcações especiais ({{ }}, {% %}) e o servidor as substitui pelos dados reais antes de entregar a página ao navegador.

Acessando dados da loja

Os objetos mais comuns disponíveis nos templates são:
{{ merchantData.manifest.name }}  {# Nome da loja #}
{{ merchantData.domain }}         {# Domínio principal da loja #}
{{ product.name }}                {# Nome do produto (páginas de produto) #}
{{ pageConfig.page }}             {# Identificador da página atual (ex: 'product') #}
Algumas propriedades só existem em determinadas páginas. Use default para evitar erros quando o dado não está disponível:
{{ product.texts.description | default('') }}  {# Descrição pode estar vazia #}
{{ product.brand.logo_url | default('') }}     {# Marca pode não ter logo #}
Consulte a referência completa em Objetos.

Compondo páginas com seções e elementos

Os templates do Tema Rocket montam cada página incluindo seções e elementos reutilizáveis:
{% include 'elements/header.twig' %}
{% include 'sections/banner.twig' %}
{% include 'sections/product-list.twig' %}

Iterando sobre dados da loja

Exibindo categorias disponíveis na loja:
<ul class="category-list">
    {% for category in categories %}
        <li>
            <a href="{{ category.url_path }}">{{ category.name }}</a>
        </li>
    {% endfor %}
</ul>
Exibindo produtos de uma listagem (páginas de categoria, busca ou promoção):
{% for item in content.data %}
    <div class="product-item">
        <h3>{{ item.name }}</h3>
        <p>{{ item.prices.price_formated }}</p>
    </div>
{% endfor %}

Usando configurações do Editor de Temas

Os parâmetros configurados pelo merchant no Editor de Temas ficam disponíveis em pageConfig.theme.params (parâmetros gerais do tema) e em section.params (parâmetros específicos de cada seção):
{% if pageConfig.theme.params.show_banner %}
    <div class="banner">
        <img src="{{ pageConfig.theme.params.banner_image }}" alt="Banner">
    </div>
{% endif %}
{% if section.params.show_title %}
    <h2>{{ section.params.title }}</h2>
{% endif %}

Passando dados para componentes Vue

O padrão do Tema Rocket é passar dados da loja como props para componentes Vue diretamente nos atributos Twig:
<product-info
    :name="{{ product.name }}"
    :has-promotion="{{ product.prices.has_promotion | bool_text }}">
</product-info>

Filtros específicos da Yampi

FiltroO que faz
vendor_urlGera URL completa para um arquivo estático do tema
assets_urlGera link completo para um asset (imagem, JS, etc.)
thumborizeGera thumbnail redimensionada para uma imagem
maskFormata um texto seguindo uma máscara (ex: CEP, telefone)
json_decodeConverte uma string JSON em array
font_linkGera link do Google Fonts para a fonte especificada
Consulte a lista completa em Filtros e Funções.

Boas práticas

Proteja acessos que podem ser nulos. Algumas propriedades só existem em determinadas páginas. Use default para evitar erros de renderização:
{# ✅ Correto #}
{{ product.texts.description | default('') }}

{# ❌ Pode quebrar se a propriedade não existir #}
{{ product.texts.description }}

Use bool_text para booleanos em props Vue. Evita ternários e mantém o template legível:
{# ✅ Correto #}
:has-promotion="{{ product.prices.has_promotion | bool_text }}"

{# ❌ Evite #}
:has-promotion="{{ product.prices.has_promotion ? 'true' : 'false' }}"

Mantenha a lógica no Vue. O Twig é para estrutura e dados — lógica complexa pertence ao componente:
{# ✅ Twig entrega dados, Vue decide o que fazer #}
<product-price
    :price="{{ product.prices.price }}"
    :has-promotion="{{ product.prices.has_promotion | bool_text }}">
</product-price>

{# ❌ Lógica de apresentação no Twig — difícil de manter #}
{% if product.prices.has_promotion %}
    <span class="price--promo">{{ product.prices.price_formated }}</span>
{% else %}
    <span class="price">{{ product.prices.price_formated }}</span>
{% endif %}