Visión general de la sintaxis de HubL

Last updated:

El CMS de HubSpot utiliza el HubSpot Markup Language, denominado HubL (pronunciado "Hubble"). HubL es la extensión de Jinjava de HubSpot, un motor de plantillas basado en Jinja. HubL utiliza una buena cantidad de marcas que son únicas de HubSpot y no son compatibles con todas las características de Jinja.

Este artículo te llevará a través de los fundamentos de las características y la sintaxis de HubL.

Tipos de delimitadores

Al igual que otros lenguajes de plantillas de uso común, como PHP, HubL se puede mezclar con tu HTML en archivos de plantillas codificadas o módulos de plantillas de HubL. Para diferenciar dónde empieza y termina tu HubL, necesitaras aprender algunos símbolos clave que actúan como delimitadores.

{% %} - statement delimiters {{ }} - expression delimiters {# #} - comment delimiters
Ten en cuenta anidar los comentarios en tu código, ya que puede resultar en que la etiqueta de comentario final se muestre como texto.

Sentencias

Las sentencias HubL se utilizan para crear módulos editables, definir la lógica condicional de las plantillas, establecer bucles for, definir variables, etc. Las sentencias están delimitadas por {%.  No imprimen nada en la página.

Expresiones

Las expresiones imprimen valores almacenados en el contexto de la plantilla. Las expresiones están delimitadas por {{. Por ejemplo, una variable debe ser definida como una sentencia, pero luego se utilizaría una expresión HubL para imprimir la variable.

Etiqueta do

La etiqueta 'do' funciona exactamente igual que las sentencias regulares {% ... %}; Se pueden utilizar para modificar listas y diccionarios.

Nota: cuando se agrega a las matrices, se quiere utilizar .append() y cuando se agrega a objetos, se quiere utilizar .update()

# Arrays {% set navigation = ["Home", "About"] %} {% do navigation.append("Contact Us") %} {{navigation}} # Objects {% set book = {"name" : "Rocking HubL", "author" : "John Smith" }%} {% do book.update({"ebook" : "yes"}) %} {{book}}# Arrays [Home, About, Contact Us] # Objects {name=Rocking HubL, author=John Smith, ebook=yes}

Comentarios

El último tipo de delimitador que puedes encontrar o decidir emplear mientras desarrollas con HubL, es un comentario HubL. Los comentarios son definidos por un {#

Módulos

Los módulos son áreas dinámicas de una plantilla que pueden ser personalizadas por el usuario final en el editor de contenidos. Por ejemplo, si estuvieras codificando un archivo de plantilla desde cero, agregarías módulos a las plantillas con etiquetas HubL, para dar a tus creadores de contenido la capacidad de editar áreas de la página.

Las etiquetas de los módulos están formadas por los siguientes componentes:

  • Tipo de módulo: especifica qué módulo se va a renderizar. Consulta la página Etiquetas admitidas por HubL para obtener una lista de los diferentes tipos de módulos disponibles.
  • Un nombre único para ese módulo: da al módulo una identidad única en el contexto de la plantilla.
  • Ruta: dependiendo de la etiqueta, define la ubicación del módulo en el administrador de diseño. La ruta de acceso a los módulos por opción predeterminada de HubSpot debe empezar siempre por @hubspot/ seguido del tipo de módulo. Para más información, consulta página sobre el uso de módulos en plantillas
  • Parámetros: especifica opcionalmente información adicional del módulo.
{% module "unique_module_name", path="@hubspot/text", label="Single Text Line", value="This is a single text line" %}<div class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module widget-type-text widget-type-text" data-hs-cos-general-type="widget" data-hs-cos-type="module" id="hs_cos_wrapper_text" style=""> <span class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_text" data-hs-cos-general-type="widget" data-hs-cos-type="text" id="hs_cos_wrapper_text_" style="">This is a single text line</span> </div>

El ejemplo anterior es un módulo de texto con los parámetros de etiqueta y valor definidos. La etiqueta define el texto de ayuda en el editor y el valor establece el texto predeterminado para ese módulo. Consulta el gif de ejemplo a continuación para ver cómo se ve esto dentro del editor.

module-label-value-min

Variables y macros

HubL incluye muchas variables predefinidas de HubSpot que imprimen sus valores útiles desde la aplicación. Además, puedes definir tus propias variables en una plantilla. En el siguiente ejemplo, una variable llamada primaryColor se define en una sentencia y luego se imprime con una expresión HubL. Este ejemplo mezcla la variable HubL con CSS.

{% set primaryColor = '#F7761F' %} {# defines variable and assigns HEX color #} a { color: {{ primaryColor }}; {# prints variable HEX value #} }a { color:#F7761F; }

Las macros HubL te permiten imprimir varias sentencias con un valor dinámico. Esta técnica resulta útil cuando te encuentras escribiendo los mismos bloques de código básico una y otra vez, pero sólo necesitas cambiar ciertos valores. En el siguiente ejemplo, se utiliza una macro para imprimir una propiedad de transición CSS3 que incluye todos los prefijos del vendedor. Puedes aprender más sobre las macros, aquí 

{% macro trans(value) %} -webkit-transition: {{value}}; -moz-transition: {{value}}; -o-transition: {{value}}; -ms-transition: {{value}}; transition: {{value}}; {% endmacro %} a { {{ trans("all .2s ease-in-out") }} }a { -webkit-transition: all .2s ease-in-out; -moz-transition: all .2s ease-in-out; -o-transition: all .2s ease-in-out; -ms-transition: all .2s ease-in-out; transition: all .2s ease-in-out; }

Filtros y funciones

Se pueden agregar filtros a tu HubL para transformar o alterar el valor de una variable de plantilla. Un ejemplo sencillo que se muestra a continuación es el de formatear una variable de fecha. Los filtros utilizan un | (símbolo de pipeline) y se aplican sin espacios a una variable.

En el ejemplo siguiente, supongamos que una publicación del blog se publicó el 29 de abril. La fecha de publicación del post se formatea con un filtro datetimeformat.  Puedes ver una lista completa de filtros aquí.

{{ content.publish_date_local_time|datetimeformat("%B %e, %Y") }} April 29, 2020

Mientras que los filtros afectan a la representación de las variables, las funciones procesan la información del valor y de la cuenta y la representan. Por ejemplo, se puede utilizar una función para obtener el número total de publicaciones de un determinado blog o para aclarar/oscurecer una variable de color en una cantidad determinada.

El ejemplo imprimiría el número total de publicaciones del blog de designers.hubspot.com/blog. Este utiliza un parámetro de ID de blog (disponible en la URL del panel del blog) para especificar a qué blog debe dirigirse. Puedes ver la lista completa de funciones aquí.

// blog_total_post_count {{ blog_total_post_count(359485112) }}2

Sentencias If

Las sentencias If te permiten usar la lógica condicional para dictar cómo tu plantilla renderizará la lógica condicional en las sentencias HubL para if, elif, else y endif. Una sentencia if debe comenzar con un if y terminar con un endif.

El siguiente ejemplo define un módulo de elección que permite al usuario final seleccionar un departamento de un desplegable. Dependiendo de lo que el usuario seleccione en el editor, la plantilla generará un encabezado dinámico para una página de carreras. Este ejemplo requiere el uso del parámetro export_to_template_context.

{% choice "department" label="Choose department", value="Marketing", choices="Marketing, Sales, Dev, Services" export_to_template_context=True %} {% if widget_data.department.value == "Marketing" %} <h3>Want to join our amazing Marketing team?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% elif widget_data.department.value == "Sales" %} <h3>Are you a Sales superstar?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% elif widget_data.department.value == "Dev" %} <h3>Do you love to ship code?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% else %} <h3>Want to work with our awesome customers?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% endif %}

Bucles for

Los bucles for permiten iterar sobre los elementos almacenados en una secuencia. Lo más común es que se utilicen para renderizar el contenido de un blog en formato de listado. Los bucles for comienzan con una sentencia for y terminan con una sentencia endfor.

En el siguiente ejemplo, una matriz de tipos de osos se almacena como una variable llamada bears. Se utiliza un bucle for para iterar a través de los diferentes tipos de osos imprimiendo un elemento de la lista para cada tipo. 

{% set bears = ["panda bear", "polar bear", "black bear", "grizzly bear", "koala bear"] %} <h1>Types of bears</h1> <ul> {% for bear in bears %} <li>{{ bear }}</li> {% endfor %} </ul><h1>Types of bears</h1> <ul> <li>panda bear</li> <li>polar bear</li> <li>black bear</li> <li>grizzly bear</li> <li>koala bear</li> </ul>

Otras características de HubL

A continuación se presentan algunas otras características de las plantillas que pueden ser útiles, a medida que desarrollas con HubL.

Escapar los delimitadores de HubL

Muchos otros idiomas comparten los mismos delimitadores que HubL, lo que puede crear problemas al trabajar en archivos codificados en el CMS. Si quieres utilizar un delimitador HubL para un idioma diferente, tienes que envolver ese código:

{% raw %} {{"Code you want to escape"}} {% endraw %}{{"Code you want to escape"}}

Incluir archivos en archivos

Puedes incluir varios archivos .html en una plantilla HubL utilizando la etiqueta include. Para crear un archivo HTML que no requiera las variables de la plantilla estándar, debes desmarcar la opción "Hacer que la plantilla esté disponible para el nuevo contenido" La sintaxis se muestra a continuación:

{% include "custom/page/web_page_basic/my_footer.html" %} {% include "hubspot/styles/patches/recommended.css" %}

También puedes compilar varios archivos CSS en un solo archivo CSS con la misma etiqueta de inclusión. Cuando publiques el archivo padre, el archivo hijo se compilará en un único archivo CSS minificado con el código del padre

Bloques y extensiones

Cuando creas plantillas complejas, puedes utilizar la creación de bloques compartimentados que amplíen una plantilla principal.

En primer lugar, crearás una plantilla principal que incluya las variables requeridas standard_header_includes y standard_footer_includes. Dentro de esa plantilla, necesitas definir un bloque único usando la siguiente sintaxis donde my_sidebar es un nombre único:

{% extends "custom/page/web_page_basic/my_template.html" %} {% block my_sidebar %} <h3>Sidebar title</h3> <ul> <li>Bullet 1<li> <li>Bullet 2<li> <li>Bullet 3<li> </ul> {% endblock %}

A continuación, puedes crear un archivo HTML hijo que rellene ese bloque. En primer lugar, debes declarar una declaración extends que haga referencia a la ruta del padre. Este bloque de código se renderizaría en la plantilla principal pero se mantendría en otro archivo más pequeño y manejable. Esta técnica no es para todo el mundo, pero puede ser útil para mantenerse organizado cuando se codifican plantillas complejas de correo electrónico o de páginas.  Cuando se utiliza esta técnica, se debe elegir la plantilla infantil, al crear el contenido.

Copiar sección HubL

En el editor de páginas, puedes copiar el marcado HubL para una sección de arrastrar y soltar para reutilizar el código según sea necesario. Esto puede ser útil cuando se quiere recrear una sección de arrastrar y soltar en un archivo codificado.

copy-section-hubl-menu

Más información sobre la copia de la sección HubL.


¿Te resultó útil este artículo?
Con este formulario puedes enviar tu opinión sobre nuestros documentos para desarrolladores. Si tienes comentarios sobre el producto de HubSpot, puedes enviarlos al Foro de ideas.