Langage de template utilisé dans HOSTEUR Emailing
Avec HOSTEUR Emailing, vous pouvez envoyer des emails dont le contenu est dynamique. Vous pouvez aussi faire en sorte que le contenu qui s’affichera dans vos emails change automatiquement selon le destinataire. Cela peut être accompli grâce à l’utilisation de notre langage de template.
Conseils :
- Si votre email est destiné à être envoyé à plusieurs contacts, créez une campagne email.
- Pour les emails transactionnels et les envois à partir de scenario de Marketing Automation, optez plutôt pour la création d’un modèle (template) d’email.
- L’emploi du langage de template dans les emails (campagnes [https://developers.sendinblue.com/reference#sendemailcampaignnow-1] ou transactionnels [https://developers.sendinblue.com/reference#sendtransacemail]) permet à leurs appels d’API v3 respectifs de déclencher leur envoi en renseignant l’ID de la campagne ou du template. Vous pouvez aussi vous servir du relais SMTP pour envoyer vos emails, il faut mentionner X-SIB-API comme en-tête avec les paramètres adéquats.
Le langage de template comprend :
- Des variables et des filtres : lors de l’envoi de l’email, ils seront changés par des valeurs particulières ; ils sont délimités par {{ ... }}
- Des tags : ils vous permettront contrôler votre contenu, c’est-à-dire ce qui s’affichera et comment il s’affichera ; ils sont délimités par {% ... %}
Remarque : grâce au langage de template, vous pourrez donc faire des modifications au niveau de l’objet de l’email, de l’en-tête, des contenus des tags HTML et du champ « à » (destinataire). Dans les templates, le contenu HTML est échappé de façon automatique par défaut, l’utilisation du tag autoescape (que nous verrons un peu plus bas) vous permettra de désactiver cette option.
1. Variables
Nous pouvons citer trois types de variables : les variables prédéfinies, les attributs de contacts et les paramètres transactionnels.
1.1. Les variables prédéfinies
{{ mirror }} |
Insère un lien qui permet de visualiser votre email dans une page web.
Il n’est pas obligatoire d’utiliser cette variable. Elle est le plus souvent positionnée en haut de l’email.
Ex : Cliquez ici pour visualiser ce message dans votre navigateur.
|
{{ unsubscribe }} |
Insère un lien pour se désabonner de vos emails.
Les emails non transactionnels envoyés via HOSTEUR Emailing doivent tous contenir un lien de désabonnement. En général, cette variable est placée en bas de page de l’email.
Ex : Se désabonner de nos emails
|
{{ update_profile }} |
Insère un lien qui permet à vos contacts de mettre à jour leurs informations.
Vous pouvez insérer un lien vers le formulaire de mise à jour dans les paramètres de votre campagne. Cette variable est fréquemment positionnée au bas de l’email.
Ex : Mettre à jour vos informations.
|
1.2. Attributs de contacts
Les variables de ce type sont de la forme {{ contact.attributeNAME }} où attributeNAME représente le nom de l’attribut de contact (il doit être identique à celui qui se trouve dans votre page de contacts), toujours écrit en MAJUSCULES et ne doit contenir aucun espace.
Par exemple, si vous voulez afficher le prénom de votre contact et que le nom de l’attribut correspondant est PRENOM, il faut utilisez {{ contact.PRENOM }}.
Dans le cas où le nom de l’attribut comporte un tiret (ce qui n’est pas conseillé), la variable devra être écrite comme suit :
{{ contact|key:"attributeNAME" }}
Par exemple, si le nom de l’attribut de contact est CELL-PHONE, utilisez {{ contact|key:"CELL-PHONE" }}.
Si vous voulez savoir comment créer un nouvel attribut, allez à la documentation « Création d'un attribut de contact ».
1.3. Paramètres transactionnels
La syntaxe de ces variables est la suivante : {{ params.parameterNAME }} où parameterNAME est le nom du paramètre transactionnel (il doit être semblable à celui dans l’API).
Donc, si vous voulez intégrer une liste de vos produits par exemple et que le nom du paramètre transactionnel est PRODUITS, mettez {{ params.PRODUITS }}.
Remarques :
- Quand vous envoyez un email de test, les variables des paramètres transactionnels resteront vierges. Les variables des attibuts de contacts s’afficheront comme elles ont été écrites dans le code du template, elles ne seront donc pas changées par les valeurs spécifiques correspondantes au destinataire.
- L’utilisation de tiret ou tout autre caractère spécial dans les noms de variables ou paramètres n’est pas conseillée. Toutefois, si vous n’avez pas le choix, utilisez la forme suivante : {{ params|key:"parameter-NAME" }}. Il est possible d’imbriquer ce filtre plusieurs fois par exemple {{ params|key:"MY-PRODUCT"|key:"MY-PRODUCT-NAME" }}.
Vous pouvez aussi accéder à un élément d’un tableau en mentionnant son ID comme suit :
{{ params.parameterARRAY.ID.parameterNAME }}
Exemple : {{ params.PRODUCTS.2.NOMPRODUIT }}
2. Tags
Voici les tags les plus utilisés dans les templates : if, for, autoescape.
2.1. if
En utilisant le tag {% if %}, vous pourrez ajouter, supprimer ou modifier du contenu dans votre template.
if |
Permet de vérifier si une valeur est vraie ou si un tableau n’est pas vide.
Ex1 : {% if contact.ACTIVE %} Félicitations ! Vous avez atteint votre objectif ce mois-ci.{% endif %}
Ex2 : {% if params.tutors %}
{% for tutor in params.tutors %} {% endfor %} {% endif %}
|
== |
Permet de vérifier si une expression est vraie.
Ex1 : {% if coupon == "WELCOME" %} Bienvenue sur notre liste ! Code de réduction : WELCOME10 {% endif %}
Ex2 : {% if contact.DONOR == true %}
|
if, in |
Permet de vérifier si une valeur (sous-chaîne) existe au sein d’une chaîne ou si une variable existe dans un tableau.
Ex1 : {% if “@exemple.com" in "paul@exemple.com" %}
Ex2 : {% if "Piano" in params.types %}
|
not |
Permet de vérifier les valeurs fausses.
Ex : {% if not user.subscribed %} Vous ne faites pas encore partie de nos membres VIP. Inscrivez-vous ici. {% endif %}
|
and / or |
Permet d’utiliser plusieurs conditions.
Ex1 : {% if temperature > 25 and temperature < 40 %} Quelle chaleur ! Recevez un bon de réduction de 25% sur nos glaces, utilisable uniquement aujourd'hui. {% endif %}
Ex2 : {% if contact.LANGUE == “FR” and contact.PAYS == “Canada” %}
Ex3 : {% if contact.PAYS == “USA” or contact.PAYS == “Canada” %}
|
elif, else |
Permet d’utiliser plusieurs alternatives.
Ex1 : {% if contact.GENRE == “Homme” %} Bonjour Monsieur {{ contact.NOM }},
Ex2 : {% if event.paid %} Votre réservation est confirmée. Merci pour votre paiement.
|
Conseil : vous pouvez utiliser des comparaisons avec le tag {% if %} si les valeurs des variables sont des chaînes de caractères (qui doivent être mises entre guillemets). Si les valeurs sont de type « float » (valeurs avec un nombre décimal à la place d’un nombre entier), les comparaisons avec ce tag pourraient donner de faux résultats.
2.2. for
Associé à vos paramètres transactionnels, le tag {% for %} s’avère être très pratique.
for, in |
Pour afficher une liste.
Ex :
{% for user in params.USERS %} {% endfor %}
|
else |
Pour exécuter un bloc de remplacement si la séquence est vide.
Ex :
{% for user in params.USERS %} {% else %} {% endfor %}
|
reversed |
Pour inverser l’ordre de saisie des éléments d’une séquence.
Ex : {% for country in params.countries reversed %} {% end for %}
|
2.3. forloop
Il est possible d’insérer des variables du type {{ forloop.*** }} dans une boucle {% for %}.
forloop.Counter |
Correspond à un nombre entier qui représente le nombre d'entrées dans la boucle. Le compte démarre à 1 : après la première entrée dans la boucle, forloop.Counter est égal à 1.
Cette expression peut être utilisée pour numéroter les éléments d'une boucle :
{% for product in params.products %} {% endfor %}
1- Produit A
|
|||
forloop.Counter0 |
Itération actuelle de la boucle (en commençant par 0).
|
|||
forloop.Revcounter |
Correspond à un nombre entier qui représente le nombre d'éléments restants dans la boucle. Après la première entrée dans la boucle, forloop.Revcounter est égal au nombre total d'éléments dans la séquence traversée. Après la dernière entrée dans la boucle, forloop.Revcounter est égal à 1.
|
|||
forloop.Revcounter0 |
Nombre d'itérations jusqu'à la fin de la boucle (en terminant par 0)
|
|||
forloop.First |
La valeur booléenne indique True s'il s'agit du premier passage dans la boucle.
Cette fonctionnalité est particulièrement pratique pour appliquer un format spécifique au premier élément d'une liste, comme par exemple pour appliquer un filtre « upper » (décrit dans la partie « 3. Filtres » plus bas) uniquement au premier élément de cette liste de produits :
{% for product in params.products %} {% else %} {{ product.name }} {% endif %} - {{ product.price }}
1. PREMIER PRODUIT - 6,00 €
|
|||
forloop.Last |
La valeur booléenne indique True s'il s'agit du dernier passage dans la boucle. Un caractère de séparation (comme « , » ou « | ») est souvent utilisé dans une liste d'éléments.
|
|||
forloop.Parentloop |
Référence l'objet forloop par rapport à une boucle parente, en cas de boucles imbriquées.
Ex : {% for country in countries %}
{% endfor %}
|
Remarque : vous devez bien respecter la casse pour les noms de ces variables de boucles.
2.4. autoescape
Dans HOSTEUR Emailing, les contenus HTML et JS de toutes les variables sont échappés par défaut. En d’autres mots, ils seront considérés comme du texte.
Donc si vous saisissez
HOSTEUR
comme contenu de votre variable dans le code de votre template, cela s’affichera comme tel dans votre email. Vous n’aurez pas le titre « HOSTEUR » au format h1 comme prévu.
L’utilisation du tag autoescape vous permet de désactiver l’option d’échappement automatique appliquée à un bloc. N’oubliez pas le tag endautoescape à la fin.
Prenons comme exemple : {% autoescape %}{{ params.my_html }}{% endautoescape %}.
Nous avons ainsi désactivé l’auto-échappement pour la variable {{ params.my_html }}. Si le contenu de cette variable est
HOSTEUR
, le titre « HOSTEUR » s’affichera bien au format h1.
Il existe tout de même des cas exceptionnels. Il se peut que le code définissant certaines variables ou l’utilisation du filtre safe désactive déjà leur échappement et il n’est donc plus nécessaire d’appliquer {% autoescape off %}.
2.5. verbatim
Le tag {% verbatim %} vous permet d’afficher les doubles accolades {{ }} telles quelles dans votre email. Elles ne seront donc pas considérées comme un élément de langage de template.
Exemple : si nous voulons afficher dans notre email le texte {{ Afficher les accolades }} tel que nous l’avons saisi, nous procéderons comme suit :
{% verbatim %}
{{ Afficher les accolades }}
{% endverbatim %}
3. Filtres
Vous pouvez appliquer des filtres à vos variables en mettant une barre verticale (|) entre les deux. Il est possible de combiner plusieurs filtres, et le résultat du filtre précédent sera appliqué au filtre suivant.
Voici une liste des filtres les plus utilisés.
Modifications du format des mots
capfirst |
Applique une majuscule au premier caractère.
Le premier caractère sera en majuscule, et tous les autres caractères seront en minuscules.
{{ contact.NAME|capfirst }}
|
title |
Applique une majuscule à chaque début de mot.
Le premier caractère de chaque mot sera en majuscule, les autres caractères seront en minuscules.
{{ contact.NAME|title }}
|
upper |
Applique des majuscules à tous les caractères.
{{ contact.NAME|upper }}
|
lower |
Applique des minuscules à tous les caractères.
{{ contact.NAME|lower }}
|
trunchars |
Tronque une chaîne de caractères si celle-ci dépasse le nombre de caractères spécifié.
Les chaînes tronquées se termineront par « … »
{{ value|truncatechars:7 }}
|
Modifications du format des nombres
floatformat |
Arrondit les valeurs float de votre paramètre ou attribut de contact à la décimale spécifiée.
Pour fonctionner convenablement, les valeurs doivent être traitées en tant que nombre, et non en tant que chaîne de caractères. Les valeurs ne doivent pas être comprises entre guillemets, comme dans “valeur”.
Si votre template comprend {{ contact.BALANCE }} et que la valeur du résultat est égale à 52,630000, celle-ci peut être arrondie à la décimale « n » comme ceci :
Ex : {{ contact.BALANCE | floatformat: 2}} prendra la forme 52,63 au lieu de 52,630000 {{ contact.BALANCE | floatformat: 0}} prendra la forme 52 au lieu de 52,630000
|
Modifications du format des dates
time_parse |
Convertit le format de la date (en tant que chaîne de caractères) en un format standard qui peut être utilisé avec d'autres filtres.
Utilisez le format actuel de la date en tant qu'argument : indiquez la date et l'heure exactes de Monday January 2 15:04:05 -0700 MST 2006 au format qui s'afficherait si cette valeur était utilisée :
Remarque : les jours et les mois doivent être en anglais pour être reconnus.
Si votre chaîne est au format RFC3339, vous pouvez utiliser le paramètre dédié time_parse_rfc3339 sans argument.
|
date |
Saisit la date au format spécifié.
Définissez votre propre format en indiquant comment la date et l'heure de référence, définies à Mon Jan 2 15:04:05 - 0700 MST 2006, s'afficheraient selon le format que vous souhaitez utiliser.
Vous devez ajouter une date à ce filtre. Vous obtenez une date à partir d'une chaîne de caractères qui utilise le filtre time_parse.
Ex : {{ "14:01 01/06/2018"|time_parse:"15:04 02/01/2006"|date:"Mon Jan 2 15:04:05 2006"}}
Remarque : les jours et les mois doivent être en anglais pour être reconnus.
|
Remarques :
- Les jours et les mois abréviés doivent être en anglais ;
- Si vous n’avez indiqué aucune valeur, la valeur attribuée sera 0 ;
- Par défaut, le fuseau horaire défini sera UTC ;
- Les mots clés am / pm peuvent être employés ;
- Vous pouvez utiliser les mots clés MST, UTC, CET, etc ou les nombres +0100 ou -0100 (pour le format UTC) pour la définition des fuseaux horaires.
Autres filtres
first |
Retourne le premier élément d'une séquence, d'un mappage ou d'une chaîne de caractères.
Si votre template comprend {{params.array|first}}
Et si votre demande de l'API comprend : “params” :
|
join |
Retourne une chaîne de caractères qui regroupe les éléments d'une séquence.
Par défaut, le séparateur des éléments est une chaîne vide. Vous pouvez définir un autre séparateur à l'aide du premier paramètre optionnel.
|
last |
Retourne le dernier élément d'une séquence, d'un mappage ou d'une chaîne de caractères.
|
lenght |
Retourne le nombre d'éléments d'une séquence ou d'un mappage, ou la longueur d'une chaîne de caractères.
{% if users|length > 10 %}
|
safe |
Permet d'indiquer qu'une chaîne de caractères ne nécessite pas d'échappement HTML avant l'affichage du résultat.
{{ params.htmltest | safe }} "params" :{HtmlTest: " Ceci est un test. "}
{{ params.htmltest }} "params" :{HtmlTest: " Ceci est un test. "}
|
slice |
Extrait certains éléments d’une séquence, d’un mappage ou d’une chaîne de caractères.
Ce filtre peut être configuré pour :
A. Passer en boucle uniquement les « n » premiers éléments d'un groupe.
B. Passer en boucle les éléments entre deux positions spécifiques (« n » et « m ») dans le groupe.
Dans ces deux cas, n'oubliez pas qu'à chaque élément d'un groupe est attribué un numéro de position unique, en commençant par « 0 » à la première position.
C. Le filtre peut aussi être configuré pour passer en boucle les éléments entre des éléments spécifiques d'un groupe.
Ex : imaginons que le groupe contient les éléments suivants : ["a","b","c","d","e","f","g","h",...]
A.
B.
C.
|
Notre langage de template se base sur le langage de template de Django. Vous pouvez vous référer aux ressources Django pour en savoir plus : https://djangobook.com/mdj2-django-templates/
Voici tous les tags et tous les filtres pris en charge par le langage de template que nous utilisons :
Tags : autoescape, comment, cycle, filter, firstof, for, if, ifchanged, now, set, spaceless, templatetag, with
Filtres (référence : https://docs.djangoproject.com/fr/3.0/ref/templates/builtins/#linebreaks) : escape, safe, escapejs, add, addslashes, capfirst, center, cut, date, default, default_if_none, divisibleby, first, floatformat, get_digit, iriencode, join, last, length, length_is, linebreaks, linebreaksbr, linenumbers, ljust, lower, make_list, phone2numeric, pluralize, random, removetags, rjust, slice, stringformat, striptags, time, title, truncatechars, truncatechars_html, truncatewords, truncatewords_html, upper, urlencode, urlize, urlizetrunc, wordcount, wordwrap, yesno