Visão geral dos campos de módulo e tema
Nos módulos e temas, os campos são usados para permitir que os criadores de conteúdo controlem o estilo e a funcionalidade de módulos e temas em seu site. Ao desenvolver um módulo ou tema, você incluirá campos em um arquivo fields.json
, que será traduzido para os editores de tema e conteúdo.
Saiba mais sobre como criar e gerenciar opções para campos de módulo e tema. Para saber mais sobre tipos de campos específicos, confira o guia de referência de tipos de módulos e campos.
Você pode adicionar campos ao arquivo fields.json
de um módulo localmente através da CLI do HubSpot e no editor de módulos no aplicativo. Para adicionar campos a um tema, você deve atualizar o arquivo fields.json
do tema localmente usando a CLI.
Ao desenvolver localmente, os campos de módulo e tema podem ser editados no arquivo fields.json
dentro da pasta do módulo ou tema. Para os módulos, esse arquivo será criado automaticamente ao usar o comando hs create module
. Todas as opções de campo disponíveis no editor de módulo estão disponíveis como propriedades que você pode adicionar ou editar no arquivo fields.json.
Isso inclui campos repetidores, grupos e condições. Um dos benefícios da edição local é que ela facilita a inclusão de módulos em sistemas de controle de versão como o git.
O gerenciador de design tem uma IU de editor de módulos incorporado que permite criar, agrupar e editar campos de módulo. O editor de módulos contém uma visualização do módulo que permite ver a aparência do módulo, bem como testar seus campos. Como os módulos não vivem no vácuo, você deve sempre testá-los no modelo que planeja usar para ver quais estilos em nível de modelo podem afetá-lo. Saiba que, se um módulo estiver contido em uma pasta bloqueada, ele não poderá ser editado desta forma.

Observação: se você trabalha localmente na maior parte do tempo, mas quer usar o editor de módulo para configurar os campos, certifique-se de buscar suas alterações. Isso é especialmente importante para quem usa sistemas de controle de versão como o git.
Por padrão, os campos dos módulos nos editores de conteúdo são empilhados verticalmente. No entanto, você pode exibir os campos do módulo lado a lado adicionando uma propriedade display_width
aos campos no arquivo fields.json
com um valor de half_width
.
Um único campo com display_width
de half_width
aparecerá como meia-largura no editor de conteúdo. Quando o campo acima ou abaixo desse campo no arquivo fields.json
estiver definido para half_width
, ele será exibido lado a lado.
Quando os campos estão relacionados entre si, muitas vezes faz sentido que sejam exibidos agrupados visualmente. Módulos e Temas suportam o agrupamento de vários campos.

Grupos de campos sem grupos de campos aninhados são exibidos basicamente com divisores acima e abaixo do grupo, sendo que o rótulo é exibido na parte superior do grupo.

Os grupos de campos podem ser aninhados. Um grupo de campos que contenha outro grupo de campos será exibido como um botão. Clicar no botão para ver o grupo mostrará o conteúdo desse grupo.
Os grupos de campos podem ser agrupados com três níveis de profundidade. Ou seja, os campos dos módulos podem ter quatro níveis de profundidade, o que facilita a criação de interfaces de usuário que expressam relações de campo e apresentam profundidade mais granular.
Os objetos de grupos de campos podem ser listados como secundários a outros grupos de campos. Sua estrutura é muito semelhante à dos próprios campos, sendo o único parâmetro especial o parâmetro "children", que é o conjunto de campos e grupos que eles contêm.
Grupos de campos podem ser definidos para serem expandidos por padrão configurando a propriedade booleana expanded
para true
nas propriedades do grupo fields.json, como mostrado no código do exemplo acima. Os grupos de campos não são expandidos por padrão e, ao utilizar grupos de campos aninhados, o grupo principal não pode usar essa propriedade.
Os grupos de campos criam dicionários que contêm os valores de campo que se deseja emitir. Se você aninhar grupos de campos, o grupo de campos aninhados será um dicionário dentro do dicionário do grupo de campos externo. Para acessar esses dados, você precisará percorrer a árvore a partir do tema raiz ou da variável do módulo, dependendo do contexto.
Campos de estilo são um tipo especial de grupo de campos em um módulo ou arquivo fields.json
do tema que fornece aos criadores de conteúdo controle sobre o estilo de um módulo ou tema na página e no editor de temas. Abaixo, saiba como adicionar campos de estilo para um módulo ou tema. Conheça as práticas recomendadas para a utilização e organização de campos de estilo.
Campos de estilo de módulo
Os campos de estilo adicionados a um módulo aparecerão na guia Estilos do editor de páginas ao editar o módulo:
Ao adicionar campos de estilo ao arquivo fields.json
de um módulo, você os adiciona dentro de um grupo de estilos. Esse grupo, no entanto, pode conter vários grupos, como mostrado abaixo:
Os seguintes campos podem ser usados como campos de estilo nos módulos. Saiba mais sobre cada um dos tipos de campo no guia de tipos de campos e módulos.
- Alinhamento
- Gradiente
- Espaçamento
- Imagem de fundo
- Borda
- Booleano
- Escolha
- Número
- Cor
- Ícone
- Imagem
- Fonte
- Alinhamento de texto
Saiba mais sobre os tipos de campos de módulo e tema.
Consulte o boilerplate do CMS para ver um exemplo de campos de estilo dentro do arquivo fields.json
de um módulo.
Campos de estilo do tema
Os campos de estilo adicionados a um tema aparecerão na barra lateral esquerda do editor de temas:
Todos os campos de estilo dentro do arquivo fields.json
de um tema serão adicionados à barra lateral esquerda do editor de temas, ao invés de precisar colocá-los sob um grupo de estilos, como mostrado abaixo:
Os seguintes campos podem ser usados como campos de estilo nos módulos. Saiba mais sobre cada um dos tipos de campo no guia de tipos de campos e módulos.
Saiba mais sobre os tipos de campos de módulo e tema.
Consulte o boilerplate do CMS para ver um exemplo de campos de estilo dentro do arquivo fields.json
de um tema.
Observação: se você é um provedor de marketplace, não substitua os campos de conteúdo existentes por campos de estilo nos módulos existentes. A modificação da hierarquia dos campos em um arquivo fields.json
pode resultar na perda de dados de instâncias de módulos existentes. Em vez disso, você deve adicionar novos campos de estilo, ou criar uma nova listagem que tenha os campos devidamente agrupados. Isso evitará que as suas atualizações sejam um problema para os clientes que utilizam os seus temas. Para promover caminhos de migração para módulos antigos, confira o fórum de ideias da HubSpot.
Alguns campos de estilo permitem gerar o css diretamente com base no valor do campo. Isso é especialmente útil em campos que podem controlar estilos mais complexos, como gradientes. Os seguintes campos de estilo têm uma propriedade .css
gerada:
Ao criar módulos que formatam informações, muitas vezes há tipos de informações que se repetem. Um módulo de receita, por exemplo, pode ter um campo para "Ingredientes". Bem, a maioria das receitas inclui mais de um ingrediente. Você poderia fornecer um campo rich text, mas perderia a capacidade de forçar um estilo consistente e de adicionar funcionalidade sobre cada ingrediente. Por isso, os repetidores são usados. O HubSpot tem duas formas de repetidores: Campos de repetição e Grupos de repetição.
Campos de repetição são campos normais, mas nos quais os criadores de conteúdo podem adicionar, remover e reorganizar instâncias. Usando o exemplo do módulo de receita acima, cada ingrediente pode ser um campo de texto de repetição.

Isso faz com que o criador de conteúdo possa adicionar tantos ingredientes quanto quiser. Do ponto de vista do desenvolvedor, você obtém uma matriz que pode ser analisada para imprimir essa lista de ingredientes, aplicando a formatação e a funcionalidade desejada.
Os campos de repetição são melhor utilizados em situações muito simples. Muitas vezes, faz mais sentido usar grupos de repetição.
Observação: não é possível definir a ordem padrão dos campos de repetição.
Os grupos de repetição são grupos de campo com a opção de repetição ativada. Os grupos de repetição permitem aos criadores de conteúdo adicionar, remover e reorganizar grupos de campos. Usando como exemplo o módulo de receitas, suponha que você queira integrar na sua lista de ingredientes uma funcionalidade de lista de compras.

A quantidade de um ingrediente seria fundamental na lista de compras. Mesmo que alguém fornecesse isso no campo de texto, o módulo precisaria analisar o campo de texto, na esperança de separar com sucesso a quantidade do ingrediente. É aqui que entram os grupos de repetição. A saída desses campos é um objeto que pode ser executado em loop.
Para melhorar a experiência de edição e evitar que os editores de conteúdo forneçam valores que você não tenha programado, permitimos definir valores mínimos e máximos para o número de itens que os criadores de conteúdo podem adicionar a um campo ou grupo de repetição.
Para os grupos de repetição, você também pode definir qual campo atua como rótulo para aquele item ao visualizar o repetidor.

Parameter | Type | Description | Default |
---|---|---|---|
max
| Inteiro | Número máximo de ocorrências deste grupo. Evita que o criador do conteúdo adicione mais do que este número de itens na IU. |
null
|
min
| Inteiro | Número mínimo de ocorrências deste grupo de campos. Evita que os usuários tenham menos do que este número de itens na IU. |
null
|
sorting_label_field
| String | Este é o ID do campo do qual obter o texto para mostrar na IU nos cartões arrastáveis. A configuração padrão é o primeiro campo do grupo. |
A propriedade inherited_value
pode ser configurada para fazer com que um campo herde seu valor padrão de outros campos. Para definir o valor padrão de um campo a partir do valor de outro campo, defina default_value_path
para o caminho do nome do campo de destino. Se default_value_path
estiver definido, qualquer default
definido no campo será ignorado.
Para acessar os valores de outros campos, os caminhos devem incluir o prefixo module.
, como se você estivesse acessando o valor no código HubL do módulo.
Para campos complexos (campos cujos valores são objetos), os usuários podem ter mais granularidade sobre quais propriedades são herdadas por meio de property_value_path
. Quaisquer caminhos referidos em inherited_value
também podem incluir chaves do valor de um campo para campos complexos — por exemplo, campos de cor têm valores de objeto que contêm a própria cor, bem como a opacidade. Para obter o valor real da cor sem a opacidade, o caminho terminaria em .color
. Por exemplo, um campo de fonte pode herdar apenas a sua cor de um campo de cor separado:
Você também pode combinar os efeitos def default_value_path
e property_value_paths
para herdar um valor padrão de um campo enquanto herda um valor de propriedade específico de outro campo:
Se um campo é herdado de outro campo mas depois é diretamente substituído no nível da página ou nas configurações do tema, a conexão com o campo de controle é desfeita. Quaisquer outros campos anexados por meio de default_value_path
ou property_value_paths
não afetarão mais o valor do campo.
Ao definir campos de módulo e tema personalizados, você pode configurar quando um campo é exibido, adicionando o objeto de visibility
ao campo no arquivo fields.json
. Por exemplo, você pode definir um módulo de formulário para exibir uma área de rich text quando a mensagem de agradecimento for selecionada, mas um seletor de página quando um redirecionamento for selecionado.
Você pode definir a visibilidade com base no valor de um controlling_field_path
ou em uma propriedade específica dentro desse campo usando o parâmetro property
.
Você também pode aplicar a visibilidade a um campo individual ou a um grupo de campos para controlar a visibilidade de todos os elementos no grupo.
Parameter | Type | Description |
---|---|---|
controlling_field_path
| String | O caminho doth do campo que controla a condição de exibição.
|
controlling_value_regex
| String | A expressão regular no campo de controle que precisa estar presente para o campo ser exibido. A regex deve corresponder a toda a string (não a um subconjunto) e será executada diferenciando letras maiúsculas de minúsculas. |
operator
| String | O operador que define como o valor
|
property
| String | Define a visibilidade com base em uma propriedade específica do campo de destino. Por exemplo, você pode ativar a visibilidade quando a propriedade |
O atributo de visibilidade pode suportar apenas um critério por vez. Para incluir vários critérios com vários operadores, bem como a ordem das operações, você pode usar advanced_visibility
.
Parameter | Type | Description |
---|---|---|
visibility_rules
| String | Por padrão, esse valor é definido como |
boolean_operator
| String | O operador booleano para os critérios condicionais. Pode ser |
criteria
| Array | Uma matriz de objetos de visibilidade que define os critérios condicionais que precisam ser atendidos para que o campo seja exibido. |
controlling_field_path
| String | O caminho separado por ponto do campo que controla a condição de exibição.
|
controlling_value_regex
| String | O valor no campo de controle que precisa ser atendido para exibir o campo. Ao usar o operador Um campo com um |
operator
| String | O operador que define como o valor
A sintaxe de regex é obrigatória ao usar |
Por exemplo, a seguir está a primeira parte do código do módulo de pagamentos padrão. Para revisar o código completo, você pode clonar o módulo no HubSpot e baixá-lo para seu ambiente local para visualizar o arquivo de fields.json
do módulo.
O código acima resulta no seguinte comportamento:
- O primeiro campo (
payment
) é um campo obrigatório (menu suspenso), que permite ao criador de conteúdo selecionar um link de pagamento específico. No HubSpot, um criador de conteúdo verá o seguinte ao adicionar o módulo à página pela primeira vez:
- Quando um link de pagamento for selecionado, os três campos a seguir (
checkout_location
,button_text
eicon
) serão exibidos. Isso ocorre porque os campos têm um atributo devisibility
que é controlado pelo campo depayment
e exige um valor de ID no parâmetro deid
do campo de pagamento.
O próprio campo de icon
usa a advanced_visibility
para ser exibido somente quando houver um link de pagamento presente no campo de payment
E quando a caixa de seleção add_icon
estiver selecionada.
Além de definir a visibilidade dentro de fields.json
, também é possível fazer isso no gerenciador de design, editando as opções de Condições de exibição de um campo.
Depois de definir a visibilidade no gerenciador de design, você pode buscar o módulo usando a CLI para exibir o atributo de visibility
no arquivo fields.json
do módulo.
Você pode adicionar condições a um campo para impedir a edição quando as condições especificadas forem atendidas. Você também pode definir uma mensagem para exibir acima do campo quando este estiver desativado para fornecer contexto no editor de conteúdo.
As condições e a mensagens são definidas no objeto disabled_controls
. As condições para tornar um campo editável são definidas no objeto rules
, que segue o mesmo formato de advanced_visibility.
O código abaixo mostra uma implementação simples e avançada dos critérios rules
:
- O campo
simple_page
inclui lógica para ser desativado se o campotext_field
estiver definido comotesting
. - O campo
fancy_page
inclui lógica para ser desativado setext_field
outext_field_2
estiver definido como qualquer valor diferente detesting
e testing2,
respectivamente.
Parameter | Type | Description |
---|---|---|
message
| String | A mensagem a ser exibida no editor de conteúdo quando o campo estiver desabilitado. |
rules
| Objeto | As condições para habilitar o campo para edição. |
criteria
| Array | Um array de objetos de condição que define os critérios que precisam ser atendidos para que o campo seja exibido. Este array pode conter vários objetos de condição separados pela lógica |
boolean_operator
| String | O operador booleano para os critérios condicionais. Pode ser |
controlling_field_path
| String | O caminho separado por ponto do campo que controla a condição de exibição.
|
controlling_value_regex
| String | O valor no campo de controle que precisa ser atendido para exibir o campo. Ao usar o operador Um campo com um |
operator
| String | O operador que define como o valor
A sintaxe de regex é obrigatória ao usar |
No editor de temas, o recurso de destaque pode ajudar os criadores de conteúdo a entender quais campos controlam os elementos da página. O recurso de destaque funciona mapeando os campos do tema aos seletores CSS que eles afetam, adicionando uma caixa em torno desses elementos ao passar o mouse sobre o campo no editor de temas.
Para configurar o recurso de destaque para campos de tema, você inclui um arquivo editor-preview.json
no diretório raiz do tema para mapear os campos a uma lista de seletores CSS. No arquivo, você incluirá uma matriz para cada campo de estilo que deseja destacar e que contém os seletores CSS relevantes, usando o seguinte formato:
Por exemplo, o código abaixo destacará os elementos da página que são controlados pelo campo de fonte principal. Você pode visualizar o exemplo completo no arquivo editor-preview.json
do tema Growth padrão.
Para começar a gerar esse arquivo, execute o comando da CLI a seguir para criar o arquivo. Durante a criação do arquivo, um script será executado para configurar os mapeamentos iniciais dos seletores de campo.
Parameter | Description |
---|---|
theme-directory-path
| O caminho para o diretório de temas. |
Depois de executar o comando, você precisará revisar e refinar o arquivo editor-preview.json
para garantir que os campos e os seletores sejam mapeados corretamente. Embora o comando generate-selectors faça uma suposição rudimentar sobre os campos que afetam os seletores, você precisará fazer correções com base em como seu tema é construído. Por exemplo, este comando não detecta quando os módulos substituem o estilo ou quando você usa macros.
Para testar esses mapeamentos, carregue o tema em uma conta e exiba o editor de temas nessa conta (Configurações > Site > Temas > Exibir tema).
Agradecemos pelos seus comentários. Eles são muito importantes para nós.