Exemples de publipostage Liquid
Découvrez comment utiliser le langage Liquid
grâce à quelques exemples simples adaptés à la plateforme Hélium Connect.
Généralités
Principe
Le publipostage permet de rendre certaines parties du contenu variable.
Par exemple, un email, “Bonjour { { PRENOM } }” deviendra “Bonjour Pierre” ou “Bonjour Marion”.

Ancienne et nouvelle syntaxe
Au tout début d’Hélium Connect les balises de publipostage devaient utiliser la syntaxe (pas d’espace entre les deux $). Depuis quelques années maintenant, Hélium Connect supporte aussi la syntaxe Liquid (les espaces sont autorisés à l’intérieur des accolades), plus riche et plus souple.
Bien que l’ancienne méthode soit toujours supportée, il est recommandé d’utiliser la nouvelle syntaxe.
Gérer une civilité manquante
Lorsque la civilité d’un utilisateur n’est pas renseignée, on peut afficher une valeur par défaut comme "M./Mme" pour éviter d’avoir un champ vide.
Méthode 1 : Utiliser une condition if

{% if CIVILITE %} {{ CIVILITE }} {% else %} M./Mme {% endif %}

  • Ici, on teste si CIVILITE existe ou non.
  • Si la variable a une valeur, on l'affiche.
  • Sinon, on affiche "M./Mme" comme solution de repli.
Cette méthode est un peu plus longue, mais elle offre plus de flexibilité si vous voulez ajouter d’autres comportements ou traitements plus complexes.
Méthode 2 : Utiliser un filtre default

{{ CIVILITE | default: "M./Mme" }}

  • Le symbole | est utilisé pour appliquer un filtre à la variable.
  • Le filtre default permet d’afficher "M./Mme" si la variable CIVILITE est vide ou absente.
A NOTER : 
  • Les blocs if/endif s’écrivent avec {% .. %}, pas avec {{ ... }} (qui servent à afficher).
  • Évite de mettre des espaces inutiles dans les balises Liquid.
  • Attention : dans des éditeurs comme TinyMCE, vérifie dans le code source (<>) qu’aucun élément caché (comme "") ne s’est glissé.
  • On peut écrire les balises Liquid sur plusieurs lignes si besoin.
Si le champ existe et non-vide
Parfois, on souhaite afficher une information uniquement si elle existe et n’est pas vide. Sinon, on affiche un message par défaut.

{% if CHAMP %}Votre choix : {{ CHAMP }}
{% else %} pas de choix pour l'instant
{% endif %}

En l'occurence, si CHAMP est vide, ça affichera :
Votre choix : pas de choix pour l'instant
Si le champ existe et égale une valeur précise
Parfois, on souhaite afficher une information uniquement si elle est une valeur précise.

{% if OPTION == 'HEB' %}Type d'hébergement : {{ TYPE_HEB }}{% endif %}

En l'occurence, si OPTION est HEB, ça affichera :
"Type d'hébergement : Chambre double"
Champ à réponses multiples
Permet d’afficher un texte en fonction des réponses à un choix multiple.

Exemple :
 “Qu’est-ce que vous aimez ? [code question : LOISIRS]” 
  •     "Lecture" [valeur "lec"]
  •     "Sport" [valeur "spo"]
  •     "Cuisine" [valeur "cui"]

{% if LOISIRS contains "lec" %}Vous aimez la lecture.{% endif %}
{% if LOISIRS contains "spo" %}Vous aimez le sport.{% endif %}
{% if LOISIRS contains "cui" %}Vous aimez la cuisine.{% endif %}

Si la personne n’a choisi que “la lecture”, il s’affichera seulement : 
“Vous aimez la lecture.”

Si la personne a choisi “la lecture” et “le sport”, il s’affichera : 
 “Vous aimez la lecture.
 Vous aimez le sport.”
Tester si la valeur du champ est dans une liste (figée)
C'est le cas inverse du champ à valeurs multiples.
Il faut utiliser une variable intermédiaire pour stocker la liste (initialisée par la première ligne ci-dessous).

{% assign civfr = 'Mme,Madame,mme,madame,Mlle,Mademoiselle,mlle,mademoiselle' | split: ',' %}
{% if civfr contains CIVILITE %}elle
{% else %}il
{% endif %}

Ici : Si on a “Mme” ou ”Madame” ou “mme” ou “madame” ou ”Mlle” ou ”Mademoiselle” ou ”mlle” ou ”mademoiselle” dans le champs CIVILITE, alors on affichera “elle” sinon on affichera “il”.
Tester si la valeur du champ n'est pas dans une liste (figée)
Il faut passer par une 2ème variable intermédiaire.

{% assign excluded = 'Marketing 1,Marketing 2,Marketing 3,Marketing 4' | split: ',' %}
{% assign O_SRC_good = true %}
{% if excluded contains O_SRC %}{% assign O_SRC_good = false %}{% endif %}

sur 

{% if O_SRC and O_SRC_good %}{{ O_SRC }}
{% else %}le site Internet{% endif %}

Ce code sert à éviter d'afficher certaines valeurs interdites. On crée d’abord une liste de valeurs à ne pas montrer, puis on vérifie si la valeur actuelle (O_SRC) est dans cette liste. Si ce n’est pas le cas, on l’affiche normalement ; sinon, on affiche "le site Internet" à la place. 
Code promo selon le mois en cours
Il faut passer par une deuxième variable intermédiaire.

La première ligne initialise la variable the_month et y mettant le mois et l'année de la date du jour (outil pour construire le code).
Ensuite on initialise la variable CODE selon la valeur de the_month.

{% assign the_month = "now" | date: "%m/%Y" %}
{% if the_month == "09/2025" %}{% assign CODE = "3REACTIV30" %}{% endif %}
{% if the_month == "10/2025" %}{% assign CODE = "4REACTIV30" %}{% endif %}
{% if the_month == "11/2025" %} {% assign CODE = "5REACTIV30" %}{% endif %}
{% if the_month == "12/2025" %}{% assign CODE = "6REACTIV30" %}{% endif %}
Votre code est {{ CODE }}.

Ce code Liquid permet d’afficher un code promo variable en fonction du mois en cours, sans devoir modifier manuellement le code chaque mois. 

La première ligne est l'initialisation : the_month devient une variable qui contient la date du jour, formatée en mois/année. Ensuite, on attribue un code selon le mois en cours.
Les nombres
Formatage des nombres

{{ 10000 | display_number }} => 10 000
{{ 10000 | display_number: 'en' }} => 10,000
{{ 10000 | display_number: 'fr', 2 }} => 10 000,00
{{ 10000 | display_number: 'en', 2 }} => 10,000.00

Ici, on affiche un nombre en fonction de la langue (FR ou EN) et du nombre de chiffres après la virgule.
Manipulation des nombres

{% assign T_PRIX_ATT = PRIX_ATT | replace: ",","." | times: 1.0 %}

Ce code convertit une chaîne de caractères représentant un prix avec une virgule (ex. "12,34") en un nombre utilisable pour des calculs. Il remplace la virgule par un point, puis multiplie par 1.0 pour forcer la conversion en nombre décimal. 
Pourcentage

{{ QUANTITE | percent: TOTAL }} %

percent est un filtre Liquid qui calcule : (QUANTITE / TOTAL) × 100, arrondi à l'entier le plus proche.

Exemple : 
Si QUANTITE = 25 et TOTAL = 200, 
alors le résultat sera : 13 % (car 25 ÷ 200 × 100 = 12.5 → arrondi à 13).
Champ multi-valué
Tester si une seule valeur ou plus

L'ACTU JURIDIQUE DES {% if RP_ACT and RP_ACT.size > 1 %}entrepreneurs{% else %}...{% endif %}

Ce code affiche "entrepreneurs" si la variable RP_ACT contient plus d’un élément. Sinon, il affiche "..." à la place, pour adapter le message en fonction du contexte.
Mettre toutes les valeurs à la suite, séparés par des virgules

{{ RP_ACT | join: ", " }}

Le filtre join: ", " transforme une liste en une chaîne de texte où les éléments sont séparés par ", ". 
Par exemple, si RP_ACT = ["Marie", "Paul", "Luc"], le résultat sera : "Marie, Paul, Luc".
Dates
Afficher la date du jour
Cette formule peut être ajoutée en publipostage ou en valeur par défaut dans un formulaire 

{{ "now" | date: "%d/%m/%Y" }}

Date enregistrement formulaire
Le filtre "date" ne tient pas compte des fuseaux horaire. Utiliser le filtre "ldate" à la place

{{ ENREG_CREATION | ldate: "%d/%m/%Y" }}

Ajouter un an

{% assign seconds = 365 | times: 24 | times: 3600 %}
{{ ENREG_CREATION | ldate: "%s" | plus: seconds | ldate: "%d/%m/%Y" }}

Format dates

"Nous sommes le {{ "now" | date: "%d/%m/%Y"}}" affichera "Nous sommes le 18/11/2025"

"Nous sommes le {{ "now" | date:"%e/%m, il est %kh%M" }}" affichera : "Nous sommes le 18/11, il est 6h52"

Pour afficher une date sous un autre format, se référer au site suivant : https://strftime.net/

Précisions
Question à choix unique :

{% if POLO_GRIS_RH %}
{% assign precisions_key = 'POLO_GRIS_RH_%1_PRECISIONS' | replace:'%1', POLO_GRIS_RH %}
{% assign precisions = [precisions_key] %}
{{ precisions }}
{% endif %}

Ce code vérifie si la variable POLO_GRIS_RH est définie (par exemple, une taille choisie).
S’il y a une valeur, il construit dynamiquement une clé texte, comme "POLO_GRIS_RH_M_PRECISIONS", en remplaçant %1 par la valeur de POLO_GRIS_RH.
Ensuite, il tente d'accéder à une variable qui porte ce nom pour en extraire une information complémentaire (les "précisions").
Cette méthode permet d'afficher un contenu différent selon la sélection de l'utilisateur, sans avoir à coder chaque cas à la main.
Le contenu final (la précision) est ensuite affiché via .
Question à choix multiple :
{% if POLO_GRIS_RH %}
{% for reponse in POLO_GRIS_RH %}
{% assign precisions_key = 'POLO_GRIS_RH_%1_PRECISIONS' | replace:'%1', reponse %}
{% assign precisions = [precisions_key] %} {{ precisions }} {% endfor %}
{% endif %}
Le code vérifie d’abord si la liste POLO_GRIS_RH existe et contient des éléments.
Ensuite, il boucle sur chaque élément (réponse) de cette liste. Pour chaque réponse, il construit une clé dynamique en remplaçant %1 par la valeur de la réponse, par exemple "POLO_GRIS_RH_M_PRECISIONS". 
Cette clé correspond au nom d’une variable contenant des précisions spécifiques. Le code tente alors de récupérer le contenu de cette variable via la clé générée. 
Enfin, il affiche la précision associée à chaque réponse. 
Cela permet d’afficher automatiquement des détails personnalisés pour chaque option sélectionnée. 
Ainsi, le rendu s’adapte dynamiquement selon les choix faits dans POLO_GRIS_RH.
Publipostage
Ajouter un lien sous forme de QRcode dans une campagne
Sans CODE_CONTACT :

{{ “https://helium-connect.fr” | qrcode: 300 }}

où 300 est la taille souhaitée
Avec CODE_CONTACT :

{{ “lien" | replace: "$CODE_CONTACT$", CODE_CONTACT | qrcode }}

Publipostage avec short_link (lien raccourci)

{{ "https://newsletter.helium-connect.fr/pl/c/$CODE_CONTACT$/fid/5fec88f1b1ff63002cea04bc" | replace: "$CODE_CONTACT$", CODE_CONTACT | short_link }}

Publipostage d'un champ de type liste de référence
Exemple :

  • Il existe une liste de référence "départements" avec comme champ de profil PCG "prix carte grise"
  • Il existe un champ de profil opportunité DPT de type liste de référence, basé sur cette liste de référence.
Exemple : 

{{ DPT_REF.PCG }}

DPT contient l'identifiant de l'entrée de la liste de référence.
DPT_REF contient le profil de l'entrée de la liste de référence.
DPT_REF.PCG contient la valeur du champ PCG de l'entrée de la liste de référence.
Publipostage lien agenda pour un formulaire événement
 Fonctionne uniquement pour les formulaires de type événement.
Sur la page de confirmation, utiliser le code : 

{{ CODE_QUESTION_EVENEMENT_ADD_CALENDAR }}

Exemple : 

{{ EVT_ADD_CALENDAR }}

A pour effet de rajouter un lien "ajouter à votre agenda" dans le mail - il ne s'agit pas d'une pièce jointe
Publipostage sur compte
Pour le cas campagne sur comptes, exemple d'utilisation :

{% for child in rel.contact_children %}
{{ child.NOM }} {{ child.PRENOM }}
{{ child.EMAIL }} {% endfor %}

  •  : c’est une boucle qui parcourt la liste rel.contact_children. 
  • rel.contact_children représente une liste des contacts enfants liés à un compte. 
  • Pour chaque élément de cette liste (chaque child), on affiche : 
    •  : le nom du contact enfant
    •  : le prénom du contact enfant
    •  : l’email du contact enfant
Ainsi, ce code affiche les infos des contacts enfants liés au compte.

Par sécurité, le nombre de children remontés est limité à 50 (les 50 derniers créés). Ils sont triés par smart_name(), c'est-à-dire par ordre alphabétique du "NOM Prénom".

Autres cas implémentés :
  • rel.contact_parent
  • rel.opportunity_parent
  • rel.opportunity_children -> liste limitée à 50
  • rel.opportunities.default (+ autres plans...) -> liste limitée à 50
Publipostage sur opportunités
Afficher seulement les opportunités "open" :

{% for opp in rel.opportunities.default %} {% if opp.OPP_STATUT == 'open' %}{{ opp.OPP_NOM }}{% endif %} {% endfor %}

Ajouter un retour à la ligne
Exemple : 

{{ HORAIRES }}

affichera :
Lun : 07h00 - 20h00 Mar : 07h00 - 20h00

{{ HORAIRES | newline_to_br }}

affichera :
Lun : 07h00 - 20h00
Mar : 07h00 - 20h00
Formulaires évènements
Dans une question évènement, configuration du "format d'affichage"
Affichage du nom complet de l’évènement : 

{{ name }}

Affichage jauge places restantes sur une question.

{% if max_participants > 0 %} (Nombre(s) restant(s) : {{ max_participants | minus: nb_participants }}) {% else %}(Complet){% endif %}

Affichage de la date et l'heure du début de l'évènement :

{{ start_at | in_time_zone: "Europe/Paris" | ldate: '%d/%m - %Hh%M' }}

Affichage de l'heure de fin de l'évènement :

{{ end_at | in_time_zone: "Europe/Paris" | ldate: '%Hh%M' }}

Dans le message ou l'email de confirmation
Nom de l’évènement (où EVT est le code de la question évènement)

{{ EVT_EVENEMENT.value.EVENEMENT_NOM }}

Description de l’évènement (où EVT est le code de la question évènement)

{{ EVT_EVENEMENT.EVENEMENT_DESCRIPTION }}

Lieu de l’évènement (où EVT est le code de la question évènement)

Adresse : {{ EVT_EVENEMENT.EVENEMENT_ADRESSE }}
Code postal : {{ EVT_EVENEMENT.EVENEMENT_CP }}
Ville : {{ EVT_EVENEMENT.EVENEMENT_VILLE }}
Pays : {{ EVT_EVENEMENT.EVENEMENT_PAYS }}

Début de l'évènement (où EVT est le code de la question évènement)

{{ EVT_EVENEMENT.value.EVENEMENT_DATE_DEBUT | ldate: "%A/%m/%Y à %Hh" }}

Fin de l'évènement (où EVT est le code de la question évènement)

{{ EVT_EVENEMENT.value.EVENEMENT_DATE_FIN | ldate: "%A/%m/%Y à %Hh" }}

Exemple date complète :

{{ EVT_EVENEMENT.value.EVENEMENT_DATE_DEBUT | ldate: "%A %e %B entre %kh%M" }} et {{ EVT_EVENEMENT.value.EVENEMENT_DATE_FIN | ldate: "%kh%M" }}

Exemple d'affichage => mardi 23 juillet entre 14h00 et 14h30
Vous avez des suggestions ?
Faites-nous vos retours sur les informations que vous aimeriez retrouver dans les exemples liquid
© Tous droits réservés 2025 | Net Hélium