Skip to main content
O bloco Custom code adiciona seu próprio HTML ou React ao carrinho. Coloque-o em qualquer seção do drawer, ou aninhe-o dentro de Cart items como um sub-bloco para que ele se repita em cada linha. Diferente de outros blocos, ele não tem configurações de Content nem seção de Design: o bloco é o código, então você trabalha inteiramente na aba Code dele.
Pré-visualização animada de adicionar e ativar um bloco Custom code no editor do Aftersell Cart

Adicionar e ativar um bloco Custom code

  1. Adicione um bloco Custom code a qualquer seção, ou como sub-bloco sob Cart items.
  2. Selecione-o e abra a aba Code.
  3. Escolha HTML ou React component. Blocos novos vêm por padrão em HTML.
  4. Escreva seu código.
  5. Se você escolheu React, clique em Compile.
  6. Ative “Use custom template”. Para este bloco, esse botão significa “mostrar meu código personalizado”, e ele vem desativado por padrão, então nada é renderizado até que você o ative.
  7. Mantenha o botão de olho da barra lateral ativado para que o bloco permaneça visível aos compradores.
Tanto o botão de olho quanto “Use custom template” precisam estar ativados para o bloco aparecer.

Comportamento

  • O bloco não renderiza nada até o carrinho ter carregado.
  • Ele também não renderiza nada quando o olho da barra lateral está desativado, “Use custom template” está desativado, o código está vazio, ou o React falha ao compilar ou renderizar. Como uma falha é silenciosa, verifique seu bloco na pré-visualização antes de publicar.

Modo HTML

O modo HTML substitui um pequeno conjunto de tokens na sua marcação. Ele serve para conteúdo estático ou baseado em tokens, não para executar lógica.

Tokens

Os valores dos tokens são strings formatadas (formato de moeda da loja, um percentual com % ou uma quantidade), prontas para inserir na marcação:

Exemplo

Modo React

O modo React compila um componente e passa a ele os dados do carrinho mais uma ação de add-to-cart.
  • O editor trava o wrapper em function CustomCode(props: CustomCodeProps) { … }, e você edita apenas o corpo entre essas linhas.
  • Você precisa clicar em Compile e depois ativar “Use custom template”, antes que o bloco apareça.
  • Seu componente pode usar useState, useEffect, useMemo, useRef e useCallback.
  • Diferente do modo HTML, o React roda no contexto da página, então pode chamar window e o Cart SDK quando estão disponíveis.
  • Se o seu componente lançar erros em tempo de execução, o bloco não renderiza nada e o resto do carrinho continua funcionando.

Props

Totais e valores de economia são inteiros na unidade menor da moeda (centavos para USD), então $12.50 é 1250, não 12.50. Eles não são strings de dinheiro formatadas como os tokens HTML.

As estruturas de cart e line

cart e line são os mesmos objetos que o SDK expõe em todos os outros lugares, então são documentados uma única vez na referência do objeto de carrinho: cada campo do carrinho, de uma linha e de um bundle. Os que você vai usar com mais frequência: cart.items, cart.itemCount, cart.totalPrice, line.title, line.quantity, line.finalLinePrice. Três coisas específicas deste bloco:
  • line só é definida em um sub-bloco de Cart items, onde seu componente é renderizado uma vez por linha. Colocado como seção, line é null e você lê cart.items em vez disso.
  • Filhos de bundle não estão em cart.items. Quando as linhas são agrupadas em um bundle, apenas a linha âncora aparece; seus filhos ficam em line.bundle.children.
  • Linhas ocultadas por um line transform também não estão lá, embora ainda contem para cart.totalPrice.

Exemplos

Exibir a contagem de itens:
Como sub-bloco de Cart items, use props.line para conteúdo por produto. O bloco é renderizado uma vez por linha, marcado com o produto e a variante daquela linha:

Lendo metadados de enriquecimento

Cada item em cart.items carrega um campo metadata: um objeto vazio {} até que um cart enricher o preencha. Uma vez preenchido, ele é indexado pelo id do enricher e contém os dados da Storefront para o produto ou variante daquela linha:
metadata está sempre presente e tem como padrão um objeto vazio {} até que a busca assíncrona do enricher seja concluída (o teste de “ainda não enriquecido” é Object.keys(item.metadata).length === 0). Use encadeamento opcional (item.metadata?.enricherId) ao ler a chave de um enricher específico, já que essa chave está ausente até o enriquecimento chegar.

Lendo códigos de desconto e descontos de linha

cart.discountCodes lista os códigos de desconto aplicados ao carrinho, e o discountAllocations de cada linha lista os descontos aplicados àquela linha específica:

Posicionamento e limites

  • Região: qualquer uma (topo, corpo ou parte inferior). Também disponível como sub-bloco de Cart items.
  • Máximo: ilimitado.
  • Estado: carrinho cheio e vazio (como bloco de seção). Como sub-bloco de Cart items, só é renderizado quando o carrinho tem linhas, uma instância por linha.
  • Não é bloqueado, então você pode removê-lo ou ocultá-lo.
  • Não há seção de Design por bloco. Estilize por meio da sua própria marcação, do CSS personalizado e das suas Configurações de design globais.

Quando usar bloco custom code vs. template personalizado vs. script personalizado