Sistema de temas
Funções
Funções de navegador que o JavaScript do tema pode chamar.
A vitrine carrega um pequeno script antes do JavaScript do tema. Ele define as funções abaixo no navegador do visitante.
promisseEvent#
Registra um evento da loja e dispara os pixels instalados, como fbq, ttq e gtag, com o mesmo identificador de evento.
await promisseEvent({
event_type: 'addToCart',
products: [{ id: 'UUID_DO_PRODUTO', name: 'Curso', price: 29.9, quantity: 1 }],
});| Campo | Regra |
|---|---|
event_type |
addToCart ou addToWishlist |
products |
De 1 a 20 produtos, com id, name, price e quantity |
A função devolve { ok, event_id }, ou null se o envio falhar. O limite é de 60 eventos por minuto. A contagem por dia aparece nos eventos da loja, no painel.
Para o pixel do navegador não contar uma compra em dobro com o envio pelo servidor, a compra usa um identificador fixo. Isso é feito pela própria vitrine, sem nada no tema.
getFeedbacksPaginationRequest#
Busca avaliações aprovadas da loja, com paginação e filtros.
const result = await getFeedbacksPaginationRequest({ page: 1, star: 5, order: 'recent', comment: true });
if (result) {
for (const review of result.data) console.log(review.star, review.comment);
}| Opção | Valores |
|---|---|
page |
Inteiro a partir de 1 |
star |
1 a 5, ou all |
order |
recent, old ou all |
comment |
true traz só as que têm texto |
A função devolve o resultado abaixo, ou null se a busca falhar. O limite é de 120 buscas por minuto.
{
"data": [{
"id": "uuid", "star": 5, "comment": "Ótimo", "tags": [], "is_anonymous": false, "created_at": "...",
"user": { "icon": "", "name": "Ana" },
"product": { "name": "Curso", "image": "...", "price": 49.9, "comparison": null, "id": "uuid" },
"product_id": "uuid"
}],
"pagination": { "page": 1, "limit": 25, "total": 138, "totalPages": 6 }
}user é null em avaliação anônima, e comment é null quando só há nota. Só entram produtos públicos.
Carrinho#
O checkout lê o carrinho em localStorage, na chave cart. Para adicionar um item pelo tema, grave neste formato e leve o comprador para /cart:
[{ "product": "uuid", "variant": null, "amount": 1, "fields": [{ "id": "uuid do campo", "valor": "resposta" }] }]| Campo | Conteúdo |
|---|---|
product |
ID do produto |
variant |
ID da variante, ou null |
amount |
Quantidade |
fields |
Respostas dos campos extras, ou lista vazia |
O tema inicial já faz isso em assets/theme.js, e é um bom exemplo para copiar.

