Fonctions if

Last updated:

Vous pouvez inclure une logique conditionnelle dans vos modules et modèles en utilisant les fonctions if et unless de HubL. Les fonctions if contiennent souvent des opérateurs pris en charge par HubL et peuvent être utilisées pour exécuter des tests d'expression

Remarque : Si vous utilisez des jetons de personnalisation dans une fonction conditionnelle de votre module d'e-mail, vous devez activer les e-mails programmables pour ce module.

Les informations transmises via l'API d'e-mails transactionnels ne fonctionneront pas dans les fonctions if, car les modèles sont compilés avant que les informations ne soient renseignées.

Syntaxe de base des fonctions if

HubL utilise des fonctions if pour définir la logique d'un modèle. La syntaxe des fonctions if de HubL est très similaire à celle de la logique conditionnelle dans Python. Les fonctions if sont encadrées par des délimiteurs de fonction, commençant par une fonction if d'ouverture et se terminant par une fonction endif.

L'exemple ci-dessous fournit la syntaxe de base d'une fonction if, où la condition est remplacée par la règle booléenne que vous allez évaluer comme étant vraie ou fausse.

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

Maintenant que vous avez vu la syntaxe de base, penchons-nous sur quelques exemples concrets de fonctions if de base. Les exemples suivants présentent des fonctions if qui déterminent si un module HubL portant le nom my_module et si une variable nommée my_module sont présents ou non dans un modèle. Notez que sans aucun opérateur, la fonction if détermine si le module est défini ou non dans le contexte du modèle.

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

Notez que lors de l'évaluation du module HubL, le nom du module est laissé entre guillemets dans la fonction if et que lors du test de la variable, aucun guillemet n'est utilisé autour du nom de la variable. Dans les deux exemples ci-dessus, le module et la variable existent dans le modèle, de sorte que les fonctions sont évaluées pour imprimer le balisage. Notez que ces exemples testent uniquement si le module et la variable sont définis, et non s'ils ont une valeur ou non.

Examinons maintenant une fonction if qui évalue si un module a une valeur, au lieu d'évaluer s'il existe dans le modèle. Pour ce faire, nous devons utiliser le paramètre export_to_template_context. Dans l'exemple ci-dessous, si l'élément de texte a une valeur dans l'éditeur de contenu, le balisage s'imprimera. Si le champ de texte du module était vide, aucun balisage ne serait restitué. Si vous travaillez dans des modules personnalisés, il existe une syntaxe simplifiée de widget.widget_name décrite dans l'exemple ici.

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

Utilisation de elif et else

Les fonctions if peuvent être restituées de manière plus sophistiquée avec des fonctions conditionnelles supplémentaires ou avec une règle qui s'exécute lorsque la ou les conditions sont fausses. Les fonctions elif vous permettent d'ajouter des conditions supplémentaires à votre logique, qui seront évaluées après la condition précédente. Les fonctions else définissent une règle qui s'exécute lorsque toutes les autres conditions sont fausses. Vous pouvez avoir un nombre illimité de fonctions elif dans une seule fonction if, mais une seule fonction else.

Voici l'exemple de syntaxe de base d'une fonction if qui utilise l'opérateur<= pour vérifier la valeur d'une variable. Dans cet exemple, le modèle imprime : « Le nombre de la variable nommée est inférieur ou égal à 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 %}

Voici un autre exemple qui utilise un module de choix pour rendre différents titres pour une page de carrières, en fonction du département choisi par l'utilisateur. L'exemple utilise l'opérateur ==, pour vérifier certaines valeurs prédéfinies dans le module de choix. 

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

Fonctions unless

Les fonctions unless sont des conditionnelles comme les fonctions if, mais elles fonctionnent selon la logique inverse. Elles restitueront et compileront le code entre les balises d'ouverture et de fermeture, sauf si la condition booléenne unique est vraie. Les fonctions commencent par unless et se terminent par endunless. Les fonctions unless prennent en charge les fonctions else, mais pas les fonctions elif.

Voici un exemple qui imprime un en-tête En construction, sauf si le champ de texte enrichi a une valeur. Si le champ de texte enrichi a du contenu, celui-ci s'affichera.

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

En plus des fonctions if et unless, HubL prend en charge les fonctions ifchanged. Ces fonctions peuvent être utilisées pour ne rendre le balisage que lorsqu'une variable a été modifiée depuis une invocation antérieure de cette balise.

Fonctions if en ligne

HubL prend en charge les fonctions if en ligne. Celles-ci peuvent être utilisées pour écrire une logique conditionnelle de manière concise avec des opérateurs et des tests d'expression.
{% 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>

Opérateurs ternaires

Il est également possible d'utiliser des opérateurs ternaires pour écrire rapidement une logique conditionnelle avec des opérateurs et des tests d'expression.
// 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 %}

Cet article vous a-t-il été utile ?
Ce formulaire est destiné à recueillir les avis sur la documentation pour les développeurs. Si vous souhaitez faire part de votre avis sur les produits HubSpot, veuillez le partager sur le forum des idéesde la communauté.