A estrutura de pastas padrão inclui layouts (ex.:
layouts/layout.tpl
),
templates de páginas (home, categoria, produto, etc.),
snipplets (componentes reutilizáveis) e a pasta static (imagens, CSS, JS). Consulte a documentação das páginas em
docs.nuvemshop.com.br.
Variáveis e interpolação
TWIG
{% set nome = 'Camisa' %}
<p>{{ nome }}</p>
{% set produto = { 'nome': 'Camisa', 'preco': 99.9 } %}
<p>{{ produto.nome }} - R$ {{ produto.preco }}</p>
JavaScript
const nome = 'Camisa';
document.body.innerHTML += `${nome}
`;
const produto = { nome: 'Camisa', preco: 99.9 };
document.body.innerHTML += `${produto.nome} - R$ ${produto.preco}
`;
PHP
$nome = 'Camisa';
echo "$nome
";
$produto = [ 'nome' => 'Camisa', 'preco' => 99.9 ];
echo "{$produto['nome']} - R$ {$produto['preco']}
";
Condicionais (if / elseif / else)
TWIG
{% set estoque = 5 %}
{% set pre_venda = false %}
{% if estoque > 0 %}
Em estoque
{% elseif pre_venda %}
Pré-venda
{% else %}
Esgotado
{% endif %}
JavaScript
const estoque = 5;
const preVenda = false;
let status;
if (estoque > 0) status = 'Em estoque';
else if (preVenda) status = 'Pré-venda';
else status = 'Esgotado';
PHP
$estoque = 5;
$preVenda = false;
if ($estoque > 0) {
$status = 'Em estoque';
} elseif ($preVenda) {
$status = 'Pré-venda';
} else {
$status = 'Esgotado';
}
Ternário e valor padrão (null coalescing)
TWIG
{# Ternário #}
{% set badge = (estoque > 0) ? 'success' : 'danger' %}
{# Valor padrão com default #}
{{ titulo | default('Sem título') }}
{# Null coalescing (quando disponível) #}
{{ subtitulo ?? 'Opcional' }}
JavaScript
const badge = estoque > 0 ? 'success' : 'danger';
const tituloExibido = titulo ?? 'Sem título';
PHP
$badge = $estoque > 0 ? 'success' : 'danger';
$tituloExibido = $titulo ?? 'Sem título';
Iterar lista (arrays)
TWIG
{% set tags = 'promoção,camisas,verão' | split(',') %}
<ul>
{% for tag in tags %}
<li>{{ tag }}</li>
{% endfor %}
</ul>
JavaScript
const tags = 'promoção,camisas,verão'.split(',');
const ul = document.createElement('ul');
for (const tag of tags) {
const li = document.createElement('li');
li.textContent = tag;
ul.appendChild(li);
}
PHP
$tags = explode(',', 'promoção,camisas,verão');
echo '';
foreach ($tags as $tag) {
echo "- $tag
";
}
echo '
';
Loop por faixa (range)
TWIG
{% for i in 1..5 %}
{{ i }}
{% endfor %}
JavaScript
for (let i = 1; i <= 5; i += 1) {
console.log(i);
}
PHP
for ($i = 1; $i <= 5; $i += 1) {
echo $i;
}
Vazio / Existência
TWIG
{% if tags is empty %}
Sem tags
{% endif %}
{% if produto is defined %}
{{ produto.nome }}
{% endif %}
JavaScript
if (!tags || tags.length === 0) {
console.log('Sem tags');
}
if (typeof produto !== 'undefined') {
console.log(produto.nome);
}
PHP
if (empty($tags)) {
echo 'Sem tags';
}
if (isset($produto)) {
echo $produto['nome'];
}
Comparações e operadores úteis
TWIG
{% set preco = 120 %}
{% set tags = ['promoção', 'camisas'] %}
{% if preco >= 100 and preco < 200 %}Faixa média{% endif %}
{% if 'promoção' in tags %}Tem promoção{% endif %}
{% if 'inverno' not in tags %}Sem inverno{% endif %}
JavaScript
const preco = 120;
const tags = ['promoção', 'camisas'];
if (preco >= 100 && preco < 200) console.log('Faixa média');
if (tags.includes('promoção')) console.log('Tem promoção');
if (!tags.includes('inverno')) console.log('Sem inverno');
PHP
$preco = 120;
$tags = ['promoção', 'camisas'];
if ($preco >= 100 && $preco < 200) echo 'Faixa média';
if (in_array('promoção', $tags, true)) echo 'Tem promoção';
if (!in_array('inverno', $tags, true)) echo 'Sem inverno';
Render condicional de atributos/estilos (com settings)
TWIG (Nuvemshop)
{# classes condicionais #}
<button class="btn {{ settings.header_colors ? 'btn-primary' : 'btn-secondary' }}"
style="color: {{ settings.text_color }}; background-color: {{ settings.background_color }};">
Comprar
</button>
{# atributo existente somente se houver link #}
<a {% if settings.menu_banner_mobile_url %}href="{{ settings.menu_banner_mobile_url }}"{% endif %}>
Banner
</a>
JavaScript
const settings = {
header_colors: true,
text_color: '#111',
background_color: '#f2f2f2',
menu_banner_mobile_url: 'https://exemplo.com'
};
const cls = `btn ${settings.header_colors ? 'btn-primary' : 'btn-secondary'}`;
const style = `color:${settings.text_color};background-color:${settings.background_color};`;
const href = settings.menu_banner_mobile_url ? ` href="${settings.menu_banner_mobile_url}"` : '';
const html = `` +
`Banner`;
PHP
$settings = [
'header_colors' => true,
'text_color' => '#111',
'background_color' => '#f2f2f2',
'menu_banner_mobile_url' => 'https://exemplo.com',
];
$cls = 'btn ' . ($settings['header_colors'] ? 'btn-primary' : 'btn-secondary');
$style = 'color:' . $settings['text_color'] . ';background-color:' . $settings['background_color'] . ';';
$href = !empty($settings['menu_banner_mobile_url']) ? ' href="' . $settings['menu_banner_mobile_url'] . '"' : '';
echo '';
echo 'Banner';
Alguns outros pontos importantes
{{ product.name | raw }}
{# Se product.name = "<b>Camisa</b>", renderiza Camisa em negrito #}
{{ product.name | upper }} {# CAMISA POLO #}
{{ product.name | lower }} {# camisa polo #}
{% set tags = product.tags | split(',') %}
<ul>
{% for tag in tags %}
<li>{{ tag }}</li>
{% endfor %}
</ul>
{# Se product.tags = "promoção,camisas,verão" #}
{{ (product.tags | split(','))[0] | capitalize }} {# Primeira tag em maiúscula #}
{{ (product.tags | split(',')) | last | lower }} {# Última tag em minúscula #}
{# Loop com filtro aplicado #}
{% for tag in product.tags | split(',') %}
<span class="tag">{{ tag | trim | upper }}</span>
{% endfor %}
Consulte mais métodos e filtros em
docs.nuvemshop.com.br.