Skip to main content
O sistema de templates da CentralCart espera que determinados arquivos HTML existam na pasta pages/ do template. Cada rota da loja é mapeada para uma página específica, e algumas recebem variáveis adicionais além das variáveis globais.

Como funciona

Quando um visitante acessa uma URL na loja, o sistema:
  1. Identifica qual tipo de página corresponde àquela rota
  2. Carrega os dados específicos daquela página
  3. Renderiza o arquivo pages/{tipo}.html com as variáveis globais + variáveis da página
Se a página não existir, o sistema renderiza pages/404.html.

Páginas disponíveis

pages/index.html

Rota: / Página inicial da loja. Não recebe variáveis adicionais além das globais. Use a tag load para carregar pacotes, widgets e outros dados dinâmicos.
<% layout 'layouts/main' %>

<section class="hero">
  <h1><%= config.headline %></h1>
  <p><%= config.sub_headline %></p>
</section>

<% load packages limit: 12 %>

<div class="products">
  <% for package in packages.data %>
    <a href="/package/<%= package.slug %>">
      <img src="<%= package.image %>" alt="<%= package.name %>" />
      <h3><%= package.name %></h3>
      <span><%= package.pricing.price | format_price %></span>
    </a>
  <% endfor %>
</div>

pages/category.html

Rota: /category/:slug Página de uma categoria específica. Variáveis adicionais:
VariávelTipoDescrição
categoryobjectDados da categoria
category.idnumberID da categoria
category.namestringNome da categoria
category.slugstringSlug da categoria
category.imagestringURL da imagem (pode ser null)
category.bannerstringURL do banner (pode ser null)
category.sub_categoriesarraySubcategorias
category.packages_countnumberQuantidade de pacotes na categoria
<% layout 'layouts/main' %>

<h1><%= category.name %></h1>

<% if category.sub_categories.size > 0 %>
  <nav class="subcategories">
    <% for sub in category.sub_categories %>
      <a href="/category/<%= sub.slug %>"><%= sub.name %></a>
    <% endfor %>
  </nav>
<% endif %>

<% load packages category_id: category.id %>

<div class="products">
  <% for package in packages.data %>
    <a href="/package/<%= package.slug %>">
      <h3><%= package.name %></h3>
      <span><%= package.pricing.price | format_price %></span>
    </a>
  <% endfor %>
</div>
Se a categoria não existir, o sistema retorna 404 automaticamente.

pages/package.html

Rota: /package/:slug Página de detalhes de um pacote (produto). Variáveis adicionais:
VariávelTipoDescrição
packageobjectDados completos do pacote
package.idnumberID do pacote
package.namestringNome do pacote
package.slugstringSlug
package.descriptionstringDescrição (HTML)
package.imagestringURL da imagem principal (pode ser null)
package.iconstringÍcone do pacote (pode ser null)
package.typestringTipo do pacote (SINGLE, MULTIPLE, etc.)
package.enabledbooleanSe o pacote está ativo
package.is_recurringbooleanSe é um pacote recorrente (assinatura)
package.is_variation_parentbooleanSe é pai de variações
package.variationsarrayVariações do pacote
package.fieldsarrayCampos/variáveis customizadas do pacote
package.pricingobjectInformações de preço
package.pricing.pricenumberPreço atual
package.pricing.compare_atnumberPreço original (para desconto, pode ser null)
package.pricing.percent_discountnumberPercentual de desconto (pode ser null)
package.stockobjectInformações de estoque
package.stock.quantitynumberQuantidade em estoque (null = ilimitado)
package.stock.availablebooleanSe há estoque disponível
package.stock.min_amountnumberQuantidade mínima por compra
package.is_auto_deliverybooleanSe a entrega é automática
package.salesnumberNúmero de vendas
<% layout 'layouts/main' %>

<div class="product-page">
  <div class="gallery">
    <img src="<%= package.image %>" alt="<%= package.name %>" />
  </div>

  <div class="info">
    <h1><%= package.name %></h1>

    <% if package.pricing.compare_at %>
      <span class="original-price"><%= package.pricing.compare_at | format_price %></span>
      <span class="discount"><%= package.pricing.percent_discount %>%</span>
    <% endif %>
    <span class="price"><%= package.pricing.price | format_price %></span>

    <div class="description">
      <%= package.description %>
    </div>

    <% if package.stock.available == false %>
      <p>Estoque esgotado</p>
    <% endif %>

    <% if package.fields.size > 0 %>
      <div class="fields">
        <% for field in package.fields %>
          <label><%= field.name %></label>
        <% endfor %>
      </div>
    <% endif %>
  </div>
</div>
Se o pacote não existir, o sistema retorna 404 automaticamente.

pages/search.html

Rota: /search Página de resultados de busca. Os parâmetros da query string são passados automaticamente para a busca. Variáveis adicionais:
VariávelTipoDescrição
packagesobjectResultado da busca (paginado)
packages.dataarrayLista de pacotes encontrados
packages.metaobjectMetadados da paginação
<% layout 'layouts/main' %>

<h1>Resultados para "<%= query.q %>"</h1>

<% if packages.data.size > 0 %>
  <div class="results">
    <% for package in packages.data %>
      <a href="/package/<%= package.slug %>">
        <img src="<%= package.image %>" alt="<%= package.name %>" />
        <h3><%= package.name %></h3>
        <span><%= package.pricing.price | format_price %></span>
      </a>
    <% endfor %>
  </div>
<% else %>
  <p>Nenhum produto encontrado.</p>
<% endif %>

pages/checkout.html

Rota: /checkout Página de finalização da compra. Variáveis adicionais:
VariávelTipoDescrição
discordobjectDados de integração Discord
discord.enabledbooleanSe a integração Discord está ativa
discord.optionalbooleanSe a conexão Discord é opcional
<% layout 'layouts/main' %>

<div class="checkout">
  <h1>Finalizar Compra</h1>

  <% if discord.enabled %>
    <div class="discord-auth">
      <p>
        <% if discord.optional %>
          Conecte seu Discord (opcional):
        <% else %>
          Conecte seu Discord para continuar:
        <% endif %>
      </p>
    </div>
  <% endif %>

  <!-- O script centralcart_script gerencia o fluxo de checkout -->
</div>

pages/login.html

Rota: /login Página de login do cliente. O fluxo de autenticação é gerenciado pelo script da CentralCart.
<% layout 'layouts/main' %>

<div class="login-page">
  <h1>Entrar na sua conta</h1>
  <!-- O formulário de login é gerenciado pelo centralcart_script -->
</div>

pages/order.html

Rota: /order/:id Página de detalhes de um pedido após a compra. Variáveis adicionais:
VariávelTipoDescrição
orderobjectDados completos do pedido
order.internal_idstringID do pedido
order.statusstringStatus (PENDING, APPROVED, CANCELLED, etc.)
order.pricenumberValor total
order.price_displaystringValor formatado
order.gatewaystringGateway utilizado
order.client_namestringNome do cliente
order.client_emailstringE-mail do cliente
order.packagesarrayPacotes do pedido
order.deliveriesarrayEntregas realizadas
order.variablesarrayVariáveis preenchidas no checkout
order.notesarrayAnotações do pedido
order.created_atstringData de criação
chat_deliveryobjectDados de entrega via chat (se aplicável)
<% layout 'layouts/main' %>

<div class="order-page">
  <h1>Pedido #<%= order.internal_id %></h1>
  <span class="status"><%= order.status %></span>
  <span class="total"><%= order.price | format_price %></span>

  <h2>Pacotes</h2>
  <% for package in order.packages %>
    <div class="package">
      <span><%= package.name %></span>
      <span>Qtd: <%= package.quantity %></span>
    </div>
  <% endfor %>

  <% if order.deliveries.size > 0 %>
    <h2>Entregas</h2>
    <% for delivery in order.deliveries %>
      <div class="delivery">
        <%= delivery.content %>
      </div>
    <% endfor %>
  <% endif %>

  <p>Data: <%= order.created_at | date: "%d/%m/%Y %H:%M" %></p>
</div>
Páginas de pedido possuem o header X-Robots-Tag: noindex, nofollow para evitar indexação por buscadores.

pages/payment.html

Rota: /payment/:id Página de pagamento pendente (ex: aguardando Pix). Variáveis adicionais:
VariávelTipoDescrição
orderobjectDados do pedido (campos limitados)
order.internal_idstringID do pedido
order.pricenumberValor total
order.price_displaystringValor formatado
order.statusstringStatus do pedido
order.gatewaystringGateway utilizado
order.gateway_displaystringNome do gateway para exibição
order.created_atstringData de criação
order.pix_codestringCódigo Pix copia-e-cola
order.qr_codestringQR Code em base64 (data URL)
<% layout 'layouts/main' %>

<div class="payment-page">
  <h1>Pagamento Pendente</h1>
  <p>Pedido #<%= order.internal_id %></p>
  <p>Valor: <%= order.price | format_price %></p>

  <% if order.pix_code %>
    <div class="pix">
      <img src="<%= order.qr_code %>" alt="QR Code Pix" />
      <input type="text" value="<%= order.pix_code %>" readonly />
      <button onclick="navigator.clipboard.writeText('<%= order.pix_code %>')">
        Copiar código Pix
      </button>
    </div>
  <% endif %>
</div>

pages/post.html

Rota: /post/:slug Página de um post do blog. Variáveis adicionais:
VariávelTipoDescrição
postobjectDados do post
post.titlestringTítulo
post.slugstringSlug
post.contentstringConteúdo (HTML)
post.descriptionstringDescrição resumida
post.created_atstringData de criação
<% layout 'layouts/main' %>

<article class="blog-post">
  <h1><%= post.title %></h1>
  <time><%= post.created_at | date: "%d/%m/%Y" %></time>
  <div class="content">
    <%= post.content %>
  </div>
</article>

pages/account/orders.html

Rota: /account/orders Página de pedidos do cliente (área logada). Requer autenticação. Variáveis adicionais:
VariávelTipoDescrição
ordersobjectPedidos do cliente (paginado)
orders.dataarrayLista de pedidos aprovados
orders.metaobjectMetadados da paginação
<% layout 'layouts/main' %>

<h1>Meus Pedidos</h1>

<% if orders.data.size > 0 %>
  <% for order in orders.data %>
    <div class="order-card">
      <span>Pedido #<%= order.internal_id %></span>
      <span><%= order.price | format_price %></span>
      <span><%= order.created_at | date: "%d/%m/%Y" %></span>
      <a href="/order/<%= order.internal_id %>">Ver detalhes</a>
    </div>
  <% endfor %>
<% else %>
  <p>Você ainda não tem pedidos.</p>
<% endif %>

pages/terms.html

Rota: /terms Página de termos de uso da loja. Variáveis adicionais:
VariávelTipoDescrição
termsstringConteúdo HTML dos termos de uso
<% layout 'layouts/main' %>

<div class="terms-page">
  <h1>Termos de Uso</h1>
  <div class="content">
    <%= terms %>
  </div>
</div>

pages/404.html

Página exibida quando uma rota não é encontrada. Não recebe variáveis adicionais.
<% layout 'layouts/main' %>

<div class="not-found">
  <h1>Página não encontrada</h1>
  <p>A página que você procura não existe.</p>
  <a href="/">Voltar para o início</a>
</div>

pages/maintenance.html

Página exibida quando a loja está em modo manutenção. Não recebe variáveis adicionais.
<div class="maintenance">
  <img src="<%= theme.logo %>" alt="<%= store.name %>" />
  <h1>Em manutenção</h1>
  <p>A loja está temporariamente indisponível. Volte em breve!</p>
</div>
Se você tiver qualquer dúvida, entre em contato com a nossa equipe de suporte em nosso WhatsApp e Discord.