Header
Quero um header com logo, menu publicado e carrinho. Qual é a implementação recomendada?Código de referência validado:
seu tema (adaptado do cookbook)
Índice: Cookbooks
Contratos utilizados
- Section Contract
- Schema Contract
- Theme Contract —
layoutGroups - Field
menu— valor persistido = handle - Field
color_scheme— valor persistido = scheme id - Field
image— logo opcional - Cart Contract —
useCorvexCart() - Data — menus
Objetivo
Header global com:- logo (texto ou imagem)
- menu resolvido via handle (
settings.menu) - link do carrinho com contagem
- esquema de cores aplicado ao subtree
- menu mobile simples (toggle, sem mega menu)
Arquivos
Schema
settings.menu persiste o handle (ex.: "main"), não o objeto do menu.
menu.
Resolver o menu (handle → links)
menu é o objeto público (items, label, handle) retornado pelo SDK após resolver o handle.
Color scheme na section
settings.colorScheme é o id do esquema (ex.: scheme-light), não o objeto de cores.
Layout group (global)
theme.json:
groups/header.json define a instância padrão (menu main, logo, etc.). Ver Theme Contract.
Carrinho
itemCount vem de useCorvexCart, o mesmo hook do drawer. Os dois leem o carrinho publicado pelo CorvexCartProvider. Este exemplo não abre o drawer. O link vai para /cart. Para abrir o painel, o tema precisa compartilhar o estado open, como o cookbook do drawer descreve.
Assinatura pública: Cart Contract.
Comportamento no Editor
- Field
menu: picker de handles ou lista de menus do rascunho da loja. - Field
color_scheme: lista esquemas deconfig/settings.schema.json. - Header aparece em todas as páginas via layout group (não no picker “Adicionar seção” do corpo).
Cuidados
- Não assumir
settings.menucomo array de links — sempre resolver via SDK. - Não duplicar o header em
templates/*.jsonse já está no layout group. - Menu vazio: mostrar fallback; loja pode não ter menu publicado ainda.
- Mobile: estado
useStatelocal à instância do header (vários headers = vários toggles independentes).
Checklist
-
menufield com defaultmain -
useStorefrontMenus([handle])+StorefrontNav -
layoutGroups.headeremtheme.json -
groups/header.jsoncom instância padrão - Somente field types Stable
-
corvex validatepassa
seu tema (adaptado do cookbook).