Opérateurs et tests d'expression

Last updated:
Afin d'étendre la logique et la fonctionnalité de vos modèles, HubL prend en charge plusieurs opérateurs et tests d'expression clés. Les opérateurs vous permettent d'exécuter des fonctions mathématiques, d'effectuer des comparaisons, de compliquer la logique des modèles et de modifier la restitution du balisage. En outre, cet article contient une liste complète des tests d'expression qui peuvent être utilisés dans HubL.

Opérateurs

Les opérateurs sont des symboles qui indiquent au compilateur HubL d'exécuter diverses opérations qui aboutissent à la sortie finale du balisage. La section suivante comprend une liste de tous les opérateurs HubL pris en charge.

Calcul

Les opérateurs mathématiques standard peuvent être utilisés pour calculer des valeurs dans le contexte d'un modèle.

Symbole Description
+ Ajoute deux objets ensemble. Vous l'utiliserez généralement pour l'addition de nombres. Si vous essayez de concaténer des chaînes de listes, utilisez ~ à la place.
- Soustrait un nombre d'un autre.
/ Divise des nombres.
% Renvoie le reste de la division de nombres.
// Divise deux nombres et renvoie le résultat entier tronqué. Exemple : {{ 20 // 7 }} est 2.
* Multiplie des nombres.
** Élève l'opérande gauche à la puissance de l'opérande droit
{% set my_num = 11 %} {% set my_number = 2 %} {{ my_num + my_number }}<br/> <!-- 11 + 2 = 13 --> {{ my_num - my_number }}<br/> <!-- 11 - 2 = 9 --> {{ my_num / my_number }}<br/> <!-- 11 / 2 = 5.5 --> {{ my_num % my_number }}<br/> <!-- 11 % 2 = 1 --> {{ my_num // my_number }}<br/> <!-- 11 // 2 = 5 --> {{ my_num * my_number }}<br/> <!-- 11 * 2 = 22 --> {{ my_num ** my_number }}<br/> <!-- 11 ** 2 = 121 -->13 9 5.5 1 5 22 121

Comparaison

Les opérateurs de comparaison peuvent être utilisés pour évaluer les valeurs pour la logique de modèle. Vous pouvez consulter quelques exemples d'utilisation d'opérateurs de comparaison dans les fonctions if ici

Symbole sténographie Description
== eq Est égal à. Est défini sur true si deux objets sont égaux.
!= ne N'est pas égal à. Est défini sur true si deux objets ne sont pas égaux.
> gt Est supérieur à. Est défini sur true si le côté gauche est supérieur au côté droit.
>= gte Est supérieur ou égal à. Est défini sur true si le côté gauche est supérieur ou égal au côté droit.
< lt Est inférieur à. Est défini sur true si le côté gauche est inférieur au côté droit.
<= lte Est inférieur ou égal à. Est défini sur true si le côté gauche est inférieur ou égal au côté droit.

La version abrégée des opérateurs de comparaison est utilisable dans les filtres qui impliquent de tester une expression comme |selectattr().

{% set my_num = 11 %} {% set my_number = 2 %} {{ my_num == my_number }}<br/> <!-- false --> {{ my_num != my_number }}<br/> <!-- true --> {{ my_num > my_number }}<br/> <!-- true --> {{ my_num >= my_number }}<br/> <!-- true --> {{ my_num < my_number }}<br/> <!-- false --> {{ my_num <= my_number }}<br/> <!-- false -->false true true true false false

Logique

Les opérateurs logiques vous permettent de combiner plusieurs expressions en une seule déclaration.

Symbole Description
and Renvoie true si l'opérande gauche et l'opérande droit sont vrais.
or Renvoie true si l'opérande gauche ou l'opérande droit est vrai.
not Invalide une déclaration et est utilisé en conjonction avec is. Consultez l'exemple ci-dessous.
(expr) Regroupe une expression pour l'ordre des opérations. Par exemple, (10 - 2) * variable.
?: L'opérateur ternaire accepte 3 arguments (expression, condition vraie, condition fausse). Évalue une expression et renvoie la condition correspondante.

Autres opérateurs HubL

Vous trouverez ci-dessous d'autres opérateurs HubL importants qui peuvent être utilisés pour effectuer diverses tâches.

Symbole Description
in Vérifie si une valeur se trouve dans une séquence.
is Effectue un test d'expression.
| Applique un filtre.
~ Concatène les valeurs.

Tests d'expression

Les tests d'expression sont diverses conditions booléennes qui peuvent être évaluées à l'aide d'opérateurs logiques.

boolean

Le test d'expression boolean vérifie si l'objet est booléen (au sens strict, pas dans sa capacité d'évaluation pour une expression véridique).

{% set isActive = false %} {% if isActive is boolean %} isActive is a boolean {% endif %}isActive is a boolean

containing

Le test d'expression containing vérifie si une variable de liste contient une valeur.

{% set numbers = [1, 2, 3] %} {% if numbers is containing 2 %} Set contains 2! {% endif %}Set contains 2!

containingall

Le test d'expression containingall vérifie si une variable de liste contient toutes les valeurs d'une autre liste.

{% set numbers = [1, 2, 3] %} {% if numbers is containingall [2, 3] %} Set contains 2 and 3! {% endif %} {% if numbers is containingall [2, 4] %} Set contains 2 and 4! {% endif %}Set contains 2 and 3!

defined

Le test d'expression defined vérifie si une variable est définie dans le contexte du modèle. Bien que vous puissiez utiliser ce test d'expression, l'écriture d'une fonction if sans aucun opérateur aura pour effet de vérifier par défaut si la variable est définie ou non.

Dans l'exemple ci-dessous, le paramètre color d'un module de couleur est testé. Si le paramètre color n'avait pas de valeur, le modèle afficherait une couleur de fond noire par défaut. S'il est défini, la couleur d'arrière-plan définie par l'utilisateur sera restituée.

{% color "my_color" color="#930101", export_to_template_context=True %} <style> {% if widget_data.my_color.color is defined %} body{ background: {{ widget_data.my_color.color }}; } {% else %} body{ background: #000; } {% endif %} </style><style> body{ background: #930101; } </style>

divisibleby

Le test d'expression divisibleby peut être utilisé pour vérifier si un objet est divisible par un autre nombre.

Par exemple, ci-dessous, une boucle for est créée pour parcourir une liste de types d'animaux. Chaque type d'animal est imprimé dans une division et un style en ligne différent est appliqué toutes les 5 divisions (largeur :100 %). Ce concept pourrait être appliqué à un blog où un balisage différent est restitué pour un certain modèle d'article. Pour en savoir plus sur les boucles for et loop.index, consultez cet article

{% set animals = ["lions", "tigers", "bears", "dogs", "sharks"] %} {% for animal in animals %} {% if loop.index is divisibleby 5 %} <div style="width:100%">{{animal}}</div> {% else %} <div style="width:25%">{{animal}}</div> {% endif %} {% endfor %}<div style="width:25%">lions</div> <div style="width:25%">tigers</div> <div style="width:25%">bears</div> <div style="width:25%">dogs</div> <div style="width:100%">sharks</div>

equalto

Le test d'expression equalto vérifie si la valeur d'une variable est égale à une constante ou à une autre variable. Vous pouvez également utiliser l'opérateur == pour effectuer le même test.

Dans l'exemple ci-dessous, la largeur des articles du blog est ajustée en fonction du nombre total d'articles dans la boucle. L'exemple de sortie suppose qu'il y a 4 articles dans le blog. 

{% for content in contents %} {% if loop.length is equalto 2 %} <div style="width:50%;">Post content</div> {% elif loop.length is equalto 3 %} <div style="width:33.333332%;">Post content</div> {% elif loop.length is equalto 4 %} <div style="width:25%;">Post content</div> {% else %} <div style="width:100%;>Post content</div> {% endif %} {% endfor %}<div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div>

even

Le test d'expression even vérifie si une variable numérique est un nombre pair. 

L'exemple ci-dessous montre une boucle simplifiée d'énumération de blog, où si l'itération actuelle de la boucle est paire, une classe even-post est attribuée à la division d'élément d'article. Autrement, une classe odd-post est attribuée. 

{% for content in contents %} {% if loop.index is even %} <div class="post-item even-post">Post content</div> {% else %} <div class="post-item odd-post">Post content</div> {% endif %} {% endfor %} <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div> <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div>

float

Le test d'expression float vérifie si une variable numérique est un nombre à virgule flottante. 

{% set quantity = 1.20 %} {% if quantity is float %} quantity is a floating point number {% endif %}quantity is a floating-point number

integer

Vérifie si une variable est un nombre entier.

{% set quantity = 120 %} {% if quantity is integer %} quantity is an integer {% endif %}quantity is an integer

iterable

Vérifie si une variable est itérable et peut être parcourue en boucle.

Cet exemple vérifie une variable appelée « jobs » pour voir si elle peut être parcourue par itération. Comme la variable contient une liste de tâches, la fonction if est définie sur true et la boucle s'exécute. Si la variable avait contenu une seule valeur, la fonction if aurait imprimé cette valeur avec un balisage différent à la place. Découvrez-en davantage sur les boucles for

{% set jobs = ["Accountant", "Developer", "Manager", "Marketing", "Support"] %} {% if jobs is iterable %} <h3>Available positions</h3> <ul> {% for job in jobs %} <li>{{ job }}</li> {% endfor %} </ul> {% else %} <h3>Available position</h3> <div class="single-position">{{ jobs }}</div> {% endif %}<h3>Available positions</h3> <ul> <li>Accountant</li> <li>Developer</li> <li>Manager</li> <li>Marketing</li> <li>Support</li> </ul>

lower

Le test d'expression lower est défini sur true si une chaîne de caractères est en minuscules. 

L'exemple ci-dessous utilise une fonction unless et un filtre pour vérifier qu'une chaîne de texte saisie dans un module de texte est toujours en minuscules.

{% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Lowercase", export_to_template_context=True %} {% unless widget_data.my_text.value is lower %} {{ widget_data.my_text.value|lower }} {% endunless %}some text that should be lowercase

mapping

Le test d'expression mapping vérifie si un objet est un dictionnaire ou non. 

L'exemple ci-dessous vérifie si l'objet de contact est un dictionnaire, ce qui est le cas. 

{% if contact is mapping %} This object is a dictionary. {% else %} This object is not a dictionary. {% endif %}This object is a dictionary.

none

Le test d'expression none vérifie si une variable a une valeur nulle.

{% module "user_email" path="@hubspot/text" label="Enter user email", value="example@hubspot.com", export_to_template_context=True %} {% unless widget_data.user_email.value is none %} {{ widget_data.user_email.value }} {% endunless %}example@hubspot.com

number

Le test d'expression number vérifie si la valeur d'une variable est un nombre ou non.

L'exemple ci-dessous vérifie si une variable est ou non une variable et, si tel est le cas, la convertit en millions.

{% set my_var = 40 %} {% if my_var is number %} {{ my_var * 1000000 }} {% else %} my_var is not a number. {% endif %}40000000

odd

Le test d'expression odd vérifie si une variable numérique est un nombre impair.

Vous trouverez ci-dessous le même exemple que le test d'expression inverse even décrit précédemment.

{% for content in contents %} {% if loop.index is odd %} <div class="post-item odd-post">Post content</div> {% else %} <div class="post-item even-post">Post content</div> {% endif %} {% endfor %} <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div> <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div>

sameas

Le test d'expression sameas vérifie si deux variables ont ou non la même valeur. 

L'exemple ci-dessous définit deux variables et vérifie ensuite si elles sont identiques ou non.

{% set var_one = True %} {% set var_two = True %} {% if var_one is sameas var_two %} The variables values are the same. {% else %} The variables values are different. {% endif %}The variables values are the same.

sequence

Le test d'expression sequence est similaire au test iterable, en ce sens qu'il vérifie si une variable est ou non une séquence.  

L'exemple ci-dessous vérifie si une variable est une séquence, puis parcourt cette séquence de genres musicaux.

{% set genres = ["Pop", "Rock", "Disco", "Funk", "Folk", "Metal", "Jazz", "Country", "Hip-Hop", "Classical", "Soul", "Electronica" ] %} {% if genres is sequence %} <h3>Favorite genres</h3> <ul> {% for genre in genres %} <li>{{ genre }}</li> {% endfor %} </ul> {% else %} <h3>Favorite genre:</h3> <div class="single-genre">{{ genres }}</div> {% endif %}<ul> <li>Pop</li> <li>Rock</li> <li>Disco</li> <li>Funk</li> <li>Folk</li> <li>Metal</li> <li>Jazz</li> <li>Country</li> <li>Hip-Hop</li> <li>Classical</li> <li>Soul</li> <li>Electronica</li> </ul>

string

Le test d'expression string vérifie si la valeur stockée dans une variable est du texte. 

L'exemple ci-dessous vérifie si une variable est ou non une chaîne de caractères et, si tel est le cas, applique un filtre de titre pour modifier la capitalisation. 

{% set my_var = "title of section" %} {% if my_var is string %} {{ my_var|title }} {% else %} my_var is not a string {% endif %}Title Of Section

string_containing

Ce test vérifie si une chaîne est contenue dans une autre chaîne. Ce test d'expression est utilisé en conjonction avec l'opérateur is.
{% if content.domain is string_containing ".es" %} Markup that will only render on content hosted on .es domains {% elif content.domain is string_containing ".jp" %} Markup that will only render on content hosted on .jp domains {% else %} Markup that will render on all other domains {% endif %}Markup that will render on all other domains

string_startingwith

Ce test d'expression vérifie si une chaîne commence par une chaîne particulière. Il est utilisé en conjonction avec l'opérateur is.

{% if content.slug is string_startingwith "es/" %} Markup that will only render on content hosted in a /es/ subdirectory {% elif content.slug is string_startingwith "jp/" %} Markup that will only render on content hosted in a /jp/ subdirectory {% else %} Markup that will render on all subdirectories {% endif %}Markup that will render on all subdirectories

truthy

Le test d'expression truthy vérifie si une expression est définie sur true.

L'exemple ci-dessous utilise un module de case à cocher booléenne pour afficher un message d'alerte.

{% boolean "check_box" label="Show alert", value=True, export_to_template_context=True %} {% if widget_data.check_box.value is truthy %} <div class="alert">Danger!</div> {% endif %}<div class='alert'>Danger!</div>

undefined

Le test d'expression undefined vérifie si une variable est indéfinie dans le contexte du modèle. Ce test est différent de none, dans la mesure où le test undefined est défini sur true lorsque la variable est présente mais n'a pas de valeur, alors que none est défini sur true lorsque la variable a une valeur nulle.  

L'exemple ci-dessous vérifie l'existence de la variable my_var dans un modèle.

{% if my_var is undefined %} A variable named "my_var" does not exist on this template. {% else %} {{ my_var }} {% endif %}A variable named "my_var" does not exist on this template.

upper

Le test d'expression upper est défini sur true lorsqu'une chaîne de caractères est entièrement en majuscules. Vous trouverez ci-dessous un exemple inverse du test d'expression lower ci-dessus.

{% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Uppercase", export_to_template_context=True %} {% unless widget_data.my_text.value is upper %} {{ widget_data.my_text.value|upper }} {% endunless %}SOME TEXT THAT SHOULD BE UPPERCASE

within

Le test d'expression within vérifie si une variable se trouve dans une liste.
{% set numbers = [1, 2, 3] %} {% if 2 is within numbers %} 2 is in the list! {% endif %} {% if 4 is within numbers %} 4 is in the list! {% endif %}2 is in the list!

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