> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.es/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Sentencias If

> Una guía práctica de las declaraciones if de Hubl de HubSpot para desarrolladores de CMS.

Puedes incluir lógica condicional en tus módulos y plantillas utilizando las[sentencias if](#basic-if-statement-syntax) y [sentencias unless](#unless-statements) de HubL. Las sentencias If suelen contener [operadores compatibles](/cms/reference/hubl/operators-and-expression-tests) con HubL y pueden utilizarse para ejecutar [pruebas de expresión](/cms/reference/hubl/operators-and-expression-tests#expression-tests).

<Warning>
  ### Nota:

  Si utilizas [tokens de personalización](/cms/reference/hubl/functions#personalization-token) dentro de una sentencia condicional de tu módulo de correo electrónico, debes [activar el correo electrónico programable para el módulo](/cms/start-building/features/data-driven-content/emails-with-programmable-content).

  La información pasada a través de [v3](/api-reference/marketing-marketing-emails-v3/guide) o [v4](/api-reference/marketing-single-send-v4/guide) de la API de envío único no funcionará dentro de las declaraciones `if`, ya que las plantillas se compilan antes de que la información se rellene.
</Warning>

## 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](/cms/reference/hubl/variables-macros-syntax), 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.

```hubl theme={null}
{% 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.

```hubl theme={null}
{% 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](/cms/reference/modules/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 el[ejemplo aquí](/cms/reference/modules/configuration).

<CodeGroup>
  ```text input.txt theme={null}
  {% 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 %}
  ```

  ```text output.txt theme={null}
  <div class="coupon-ad">
  <h3>For a limited time get 50% off all of our products!</h3>
  </div>
  ```
</CodeGroup>

## 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 `<=`](/cms/reference/hubl/operators-and-expression-tests#comparison) para comprobar el valor de una variable. En este ejemplo, la plantilla se imprimirá con la leyenda: "El número con nombre de la variable es menor que o igual a 6."

```hubl theme={null}
{% 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 ==](/cms/reference/hubl/operators-and-expression-tests#comparison), para comprobar ciertos valores predefinidos en el módulo de elección.

```hubl theme={null}
{% 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á.

```hubl theme={null}
{% 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](/cms/reference/hubl/operators-and-expression-tests).

```hubl theme={null}
{% 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](/cms/reference/hubl/operators-and-expression-tests#logical).

```hubl theme={null}
// 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 %}
```
