Última modificación: 12 de septiembre de 2025
‘Obtén información sobre los requisitos que deben cumplir los módulos de un tema al enviarlos al mercado de plantillas de HubSpot.’; Más información sobre los requisitos para enviar un módulo al mercado de plantillas. Estos requisitos se aplican tanto a los módulos de un tema como a los módulos independientes.

Restricciones de los módulos

Los módulos no deben contener HubDB, llamadas a las funciones sin servidor o el campo de objeto del CRM. Los siguientes tipos de módulos no deben construirse como módulos independientes
  • HTML
  • Módulos de ancho completo
  • Formularios y formularios de varios pasos
  • Módulos espaciadores o módulos que crean una estructura de página que no es de la interfaz de usuario
  • Módulos que duplican la funcionalidad del módulo predeterminado
  • Módulos específicos de comercio
  • Módulos específicos de correo electrónico

Contenido de los módulos

Más información sobre los requisitos para las etiquetas de los módulos y el texto de ayuda, los campos y el contenido predeterminado.

Etiquetas de los módulos y texto de ayuda

  • Los módulos deben tener etiquetas descriptivas que transmitan el propósito del módulo. La etiqueta Banner Hero con desplazamiento Parallax es descriptiva, mientras que las etiquetas Banner Hero y Galería no lo son.
  • Las etiquetas del módulo no deben contener números, como Banner Hero 01.
  • Las etiquetas de los módulos no deben contener guiones bajos.
  • Las etiquetas de los módulos no deben contener abreviaturas, como Col en lugar de Columna.
  • Los módulos deben contener texto de ayuda incorporado cuando corresponda para transmitir cómo usar el módulo.
  • Los módulos no deben tener el mismo nombre que un módulo predeterminado.
  • En el caso de los módulos independientes, la etiqueta del módulo debe coincidir con el nombre que aparece en el índice de plantillas. Por ejemplo, si tu anuncio de plantilla es SuperAwesome Banner con desplazamiento, la etiqueta de tu módulo debe ser la misma.

Contenido predeterminado

  • El campo predeterminado no puede incluir texto de Lorem ipsum.
  • El contenido predeterminado de los campos debe representar el propósito del campo:
    • Al incluir campos de menú, los módulos deben usar la opción de Seleccionar un menú como la opción de contenido predeterminada.
    • Al incluir campos de formulario, los módulos deben usar Seleccionar un formulario como la opción de contenido predeterminada.
    • Al incluir campos de selección de blog, los módulos deben usar Seleccionar un blog como la opción de contenido predeterminada.
  • Si agregar contenido predeterminado a un módulo no tiene sentido, puedes usar un marcador de posición de módulo para ayudar al creador de contenido a visualizar el espacio que llenará con contenido.

Íconos de módulo

Los módulos deben incluir un ícono personalizado asignado al módulo (que reemplaza el ícono predeterminado). No utilices logotipos de empresas como íconos, como los logotipos de Apple o Amazon. Para los módulos incluidos en un tema, cada módulo debe tener un ícono único y relevante. Más información sobre los íconos de módulo.

Módulos que requieren cuentas de terceros

Para módulos individuales, si el módulo requiere una cuenta de terceros, debe anotarse en la descripción de la plantilla. Por ejemplo, si tu módulo hace uso de la plataforma de Google Maps, debes incluir una nota: “El uso de este módulo requiere una cuenta de Google Cloud (la plataforma de Google Maps)”.

Campos de módulo

Revisar los requisitos específicos para los módulos en un tema y los módulos independientes a continuación:
  • Para módulos en un tema:
    • Por ejemplo, los módulos deben contener texto de ayuda incorporado y contenido predeterminado específico para ciertos campos.
    • Al menos un campo de logotipo debe heredar de la configuración de marca. Si se utiliza un campo de imagen para representar un logotipo, el campo de imagen no tiene que heredar de la configuración de la marca.
  • Tanto para los módulos en un tema como para los módulos independientes:
    • Los nombres de los campos de módulo deben describir el propósito del campo. Por ejemplo, si un campo de texto está destinado a incluir el cargo laboral de una persona, Cargo sería una descripción adecuada, mientras que Título no lo sería.
    • Todos los módulos predeterminados de HubSpot deben tener un diseño y mostrarse correctamente en todas las plantillas enviadas.

Configuración de fields.json y module.html

Para garantizar la funcionalidad compatible entre temas y módulos independientes, los módulos deben heredar los campos de color y fuente definiendo default_value_path o property_value_paths, o ambos en el archivo fields.json y agregar una referencia a los campos de tema en el archivo module.html. Más información sobre estos requisitos.

Calidad del código del módulo

Los módulos deben ser independientes

Módulos de tema

Cualquier archivo necesario para el módulo de tema, como CSS o JavaScript, debe estar en la carpeta del tema e incluido en el directorio del tema. Puedes usar la función de archivos vinculados en el administrador de diseño. De forma alternativa, incluye los archivos que usan las funciones require_js() o require_css() con una ruta relativa al archivo. Para bibliotecas comunes, como slick.js, puedes incluirlas usando las funciones require_js() o require_css() con una URL absoluta a la CDN donde está alojada.

Módulos independientes

Para módulos independientes, todos los archivos CSS y Javascript deben estar contenidos en module.css o module.js. De forma alternativa, incluye los archivos que usan las funciones require_js() o require_css() con una URL absoluta a la CDN donde está alojada. No es posible utilizar la función de archivos vinculados en el administrador de diseño, ya que solo está disponible para los módulos de temas. Dado que module.js se incluye en el DOM antes de cualquier archivo require_js o require_css, el Javascript en la sección module.js debe diferirse utilizando la siguiente anotación:
document.addEventListener('DOMContentLoaded', function () {
  // Put Javascript here
});
Todos los scripts y archivos deben representarse en el encabezado del HTML del módulo.

Restricciones de código para módulos independientes

Las siguientes restricciones se aplican solo a los módulos independientes:
  • Se recomienda usar JS vanilla siempre que sea posible. Agregar una biblioteca de jQuery a un sitio que no está utilizando jQuery puede causar conflictos y ralentizar la página del sitio web.
  • Si usas una biblioteca jQuery, usa la función require_js() para incluir la biblioteca en caso de que jQuery esté desactivado con la casilla de verificación (Booleano) en la configuración de la cuenta para evitar conflictos de múltiples bibliotecas jQuery.
{% if not site_settings.include_jquery %}
{{ require_js("https://code.jquery.com/jquery-3.7.0.min.js", "footer") }}
{% endif %}

Categorías

  • Todos los módulos independientes deben tener al menos una categoría. Los módulos enviados como parte de un tema no están obligados a tener categorías, pero es una práctica recomendada incluir al menos una. Más información sobre cómo agregar categorías a los módulos.

Selectores de nombre de clase

  • Cualquier selector de nombre de clase debe ir precedido del nombre del módulo, reemplazando los espacios con guiones. Por ejemplo, a continuación se muestra el archivo module.html para un botón llamado example-button, con cada nombre de clase y selector CSS reflejando su nombre.
<style>
{% scope_css %}
{# Button wrapper #}
 {% if module.styles.group_alignment.alignment %}
  .example-button-wrapper {
   text-align: {{ module.styles.group_alignment.alignment.horizontal_align }};
   }
 {% endif %}

{# Button #}

.example-button {
 {% if module.styles.group_background.color.color %}
  background-color: rgba({{ module.styles.group_background.color.color|convert_rgb }}, {{ module.styles.group_background.color.opacity / 100 }});
 {% endif %}
 }
 {% end_scope_css %}
</style>
{% end_require_css %}

{##### Module HTML #####}

<div class="example-button-wrapper">
 <a href="{{ href }}" class="example-button"
 {% if module.button_link.open_in_new_tab %}target="_blank"{% endif %}
 {% if rel %}rel="{{ rel|join(" ") }}"{% endif %}
 >
  {{ module.button_text }}
 </a>
</div>

Estilos y JavaScript

  • Estilos:
    • Los módulos deben tener un grupo de estilo que no esté vacío.
    • No se recomienda la codificación de estilos inline dentro de los módulos. Por el contrario, usa estilos inline dinámicos al habilitar campos para controlar el estilo.
  • JavaScript
    • JavaScript debe poder representar múltiples instancias de un módulo. Javascript en el panel de JS solo se cargará una vez por página, independientemente del número de eventos del módulo.
    • Javascript debe hacer referencia a los elementos DOM según los nombres de clase específicos del módulo para garantizar que los elementos que están fuera del módulo no sean afectados de manera accidental.
Al crear módulos, puedes usar una variable incorporada llamada {{name}}. Esta variable extrae el ID de instancia del módulo (que se puede usar solo en el panel de HTML y HubL) para ayudar en el marcado de CSS y JS para módulos complejos. Más información sobre esto en nuestra documentación para desarrolladores.

Organización de campos

Deben cumplirse los siguientes requisitos de organización y agrupación de campos.

Pestaña de contenido

  • Cuando hay al menos un control dentro de un grupo de campos, todos los controles deben agruparse en categorías etiquetadas según su función.
  • Los campos de módulo agregados a la pestaña Contenido deben proporcionar formas de personalizar el contenido de un módulo. Por ejemplo, controles de imagen, ícono, texto alternativo y controles de enlaces.

Pestaña de estilos

Los grupos de campos de estilo de módulo deben ser coherentes y seguir un patrón. A continuación, se encuentra un orden recomendado para los grupos de campos de estilo. Estos grupos pueden estar en el nivel superior o anidados en un grupo profundo. Los grupos vacíos también se pueden eliminar:
  • Ajustes preestablecidos
  • Texto
  • Fondo
  • Borde
  • Hover
  • Esquina
  • Espaciado
  • Alineación
  • Grupos de estilos personalizados que no se ajustan a lo anterior
  • Avanzado
Los siguientes tipos de campos deben estar incluidos en la pestaña Estilos si están presentes:
  • Las opciones de animación siempre deben colocarse cerca de la parte inferior de la lista de grupos de campos.
  • Las opciones que permiten a los creadores de contenido agregar fragmentos de código o CSS deben agruparse al final de la lista de grupos de campos bajo un campo con la etiqueta Avanzado.
  • Los controles deben estar estandarizados en todos los módulos. Por ejemplo, todos los elementos que pueden tener un control de radio de borde deben ofrecer ese control. Evita ofrecer controles en algunos módulos que estén ausentes en otros.
  • Los campos de módulo agregados a la pestaña Estilo deben proporcionar formas de diseñar el módulo. Por ejemplo:
    • Las opciones de estilo, como color, estilo de texto, alineación, espaciado, borde y radio de esquina.
    • Animaciones, como efectos de colocar el cursor y elementos deslizantes.
    • Ajustes preestablecidos, como temas oscuros y claros que están destinados a cambiar muchos estilos al mismo tiempo.

Ejemplos de organización de campo

Ajustes preestablecidos

Los ajustes preestablecidos se pueden usar cuando se quiere dar a los creadores de contenido un conjunto limitado de opciones, a menudo vinculadas a la configuración del tema. Por ejemplo, el módulo Ícono incluido en el tema Growth contiene valores predeterminados para colores Oscuros y Claros, lo que permite que haya coherencia cuando se usa en todo el sitio web.

Agrupación multinivel

Al decidir si mantener los campos de estilo en el nivel superior o anidarlos, considera el siguiente ejemplo.

Agrupar campos individuales

El siguiente módulo de botón contiene agrupaciones para Ajustes preestablecidos, Texto, Fondo y mucho más. Aunque el grupo de campos Esquina contiene solo el control de radio de esquina, se agrupa para crear una experiencia uniforme en la creación de contenido. module-requirements-2_1button-styles