Sentencias If

Last updated:

Puedes incluir lógica condicional en tus módulos y plantillas utilizando lassentencias if y sentencias unless de HubL. Las sentencias If suelen contener operadores compatibles con HubL y pueden utilizarse para ejecutar pruebas de expresión

Nota: si utilizas tokens de personalización dentro de una sentencia condicional de tu módulo de correo electrónico, debes activar el correo electrónico programable para el módulo.

La información pasada a través de la API de correo electrónico transaccional no funcionará dentro de las sentencias if, ya que las plantillas se compilan antes de que la información se rellene.

Sintaxis básica de la sentencia if

HubL utiliza sentencias if para ayudar a definir la lógica de una plantilla. La sintaxis de las sentencias if de HubL es muy similar a la lógica condicional de Python. Las sentencias if están envueltas en delimitadores de sentencias, comenzando con una sentencia if de apertura y terminando con un endif.

El ejemplo siguiente proporciona la sintaxis básica de una sentencia if, en la que "condición" se sustituiría por la regla booleana que ibas a evaluar como verdadera o falsa.

{% if condition %} If the condition is true print this to template. {% endif %}

Ahora que has visto la sintaxis básica, veamos algunos ejemplos reales de sentencias if básicas. Los siguientes ejemplos muestran sentencias if que comprueban si un módulo HubL con el nombre my_module y si una variable llamada my_module están presentes en una plantilla. Observa que sin ningún operador, la sentencia if evaluará si el módulo está definido o no en el contexto de la plantilla.

{% module "my_module" path="@hubspot/rich_text", label="My rich text module", html="Default module text" export_to_template_context=true %} {% if widget_data.my_module %} A module named "my_module" is defined in this template. {% endif %} {% set my_variable = "A string value for my variable" %} {% if my_variable %} The variable named my_variable is defined in this template. {% endif %}

Observa que al evaluar el módulo HubL, el nombre del módulo se deja entre comillas dentro de la sentencia if y al probar la variable no se utilizan comillas alrededor del nombre de la variable. En los dos ejemplos anteriores, el módulo y la variable existen en la plantilla, por lo que las sentencias se evalúan para imprimir la marca. Ten en cuenta que estos ejemplos solo prueban si el módulo y la variable están definidos, no si tienen o no un valor.

Ahora veamos una sentencia if que evalúa si un módulo tiene un valor, en lugar de evaluar si existe en la plantilla. Para ello, debemos utilizar el parámetro export_to_template_context . En el ejemplo siguiente, si se valora el módulo de texto en el editor de contenidos, se imprimiría la marca. Si el campo de texto del módulo estuviera vacío, no se mostraría ninguna marca. Si estás trabajando con módulos personalizados, existe una sintaxis simplificada de widget.widget_name que se describe en elejemplo aquí.

{% module "product_names" path="@hubspot/text", label="Enter the product names that you would like to render the coupon ad for", value="all of our products", export_to_template_context=True %} {% if widget_data.product_names.value %} <div class="coupon-ad"> <h3>For a limited time, get 50% off {{ widget_data.product_names.value}}! </h3> </div> {% endif %} <div class="coupon-ad"> <h3>For a limited time get 50% off all of our products! </h3> </div>

Usando elif y else

Las sentencias if pueden hacerse más sofisticadas con sentencias condicionales adicionales o con una regla que se ejecuta cuando la condición o las condiciones son falsas. Las sentencias elif te permiten agregar condiciones adicionales a tu lógica que se evaluarán después de la condición anterior. Las sentencias else definen una regla que se ejecuta cuando todas las demás condiciones son falsas. Puedes tener un número ilimitado de sentencias elif dentro de una sola sentencia if, pero solo una sentencia else.

A continuación se muestra el ejemplo de sintaxis básica de la sentencia if que utiliza el operador <= para comprobar el valor de una variable. En este ejemplo, la plantilla se imprimiría: "El número con nombre de la variable es menor que o igual a 6." 

{% set number = 5 %} {% if number <= 2 %} Variable named number is less than or equal to 2. {% elif number <= 4 %} Variable named number is less than or equal to 4. {% elif number <= 6 %} Variable named number is less than or equal to 6. {% else %} Variable named number is greater than 6. {% endif %}

A continuación se muestra otro ejemplo que utiliza un módulo de elección para mostrar diferentes encabezados para una página de carreras, en función del departamento elegido por el usuario. El ejemplo utiliza el operador ==, para comprobar ciertos valores predefinidos en el módulo de elección. 

{% 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 %}

Sentencias unless

Las sentencias unless son condicionales al igual que las sentencias if, pero funcionan con la lógica inversa. Se renderizará y compilará el código entre las etiquetas de apertura y cierre, a menos que la condición booleana única se evalúe como verdadera. Las sentencias unless comienzan con un unless y terminan con un endunless. Las sentencias unless admiten else pero no elif.

A continuación se muestra un ejemplo que imprime un encabezado "En construcción", a menos que se valore el campo de texto enriquecido. Si el campo de texto enriquecido tiene contenido, entonces ese contenido se mostrará.

{% module "my_page_content" path="@hubspot/rich_text", label="Enter your page content", html="" export_to_template_context=true %} {{ widget_data.my_page_content.html }} {% unless widget_data.my_page_content.html %} <h1>This page is under construction.</h1> <h3>Come back soon!</h3> {% endunless %}

ifchanged

Además de las sentencias if y unless, HubL admite las sentencias ifchanged. Estas sentencias pueden utilizarse para que solo se muestre la marca cuando una variable ha cambiado desde una invocación anterior de esta etiqueta.

Sentencias if en línea

HubL admite las sentencias if en línea. Se pueden utilizar para escribir lógica condicional de forma concisa con operadores y pruebas de expresión.
{% set color = "Blue" if is_blue is truthy else "Red" %} // color == "blue" {{ "Blue" if is_blue is truthy else "Red" }} // "Blue" {% set dl = true %} <a href="http://example.com/some.pdf" {{"download" if dl }} >Download PDF</a>

Operadores ternarios

También es posible utilizar operadores ternarios para escribir rápidamente lógica condicional con operadores y pruebas de expresión.
// If the variable is_blue is true, output "blue", otherwise output"red" {{ is_blue is truthy ? "blue" : "red" }} // Set the variable is_red to false if is_blue is true, otherwise set to true {% set is_red = is_blue is truthy ? false : true %}

¿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.