Langage de gabarit

Une syntaxe volontairement limitée : tout est échappé par défaut, aucune fonction PHP n'est accessible, les boucles et les inclusions sont bornées.

{{ product.name }}                      variable (échappée)
{{ product.price | money }}              filtre
{{ settings.hero_title | default: shop.name }}
{{ products[0].name }}  {{ product["name"] }}

{% if product.on_sale and product.in_stock %} … {% elsif x > 2 %} … {% else %} … {% endif %}
{% unless customer %} … {% endunless %}
{% for p in products %}{{ loop.index }}/{{ loop.length }} {{ p.name }}{% else %}Aucun produit{% endfor %}
{% set total = p.price | times: 2 %}
{% include "carte-produit" with product: p %}
{% section "banniere" %}
{# commentaire #}   {% raw %}{{ pas interprété }}{% endraw %}
{{- … -}}  {%- … -%}                    retire les espaces autour

Opérateurs

== != < > <= >= contains and or not — liste.size, liste.first, liste.last.

Filtres

FiltreRôleExemple
moneyPrix en euros à partir de centimes{{ product.price | money }} → 12,90 €
rawAffiche sans échappement (HTML déjà nettoyé par le cœur){{ page.body | raw }}
escapeÉchappe (déjà fait par défaut){{ texte | escape }}
defaultValeur de secours si vide{{ settings.hero_title | default: shop.name }}
upcaseMajuscules{{ "pain" | upcase }} → PAIN
downcaseMinuscules{{ "PAIN" | downcase }} → pain
capitalizePremière lettre en majuscule{{ "pain" | capitalize }} → Pain
truncateCoupe à N caractères{{ product.description | truncate: 80, "…" }}
strip_htmlRetire les balises HTML{{ page.body | strip_html }}
newline_to_brRetours à la ligne en <br>{{ product.description | newline_to_br }}
dateDate formatée (format PHP){{ order.created_at | date: "d/m/Y" }} → 30/10/2026
sizeNombre d'éléments ou de caractères{{ products | size }} → 12
joinAssemble une liste{{ tags | join: ", " }} → bio, levain
firstPremier élément{{ product.images | first }}
lastDernier élément{{ breadcrumbs | last }}
limitN éléments (à partir d'un décalage){% for p in products | limit: 4, 0 %}
reverseInverse une liste{% for p in products | reverse %}
whereGarde les éléments dont la clé est vraie (ou égale){{ products | where: "on_sale" }}
mapExtrait une clé de chaque élément{{ menu | map: "name" | join: " · " }}
appendAjoute à la fin{{ "Pain" | append: " bio" }} → Pain bio
prependAjoute au début{{ "bio" | prepend: "Pain " }} → Pain bio
replaceRemplace un texte{{ phone | replace: " ", "" }}
plusAddition{{ 2 | plus: 3 }} → 5
minusSoustraction{{ 5 | minus: 2 }} → 3
timesMultiplication{{ 2 | times: 3 }} → 6
divided_byDivision (0 si division par zéro){{ 7 | divided_by: 2 }} → 3.5
roundArrondi{{ 3.14159 | round: 2 }} → 3.14
pluralizeSingulier ou pluriel selon le nombre{{ n | pluralize: "produit", "produits" }}
url_encodeEncode pour une adresse{{ q | url_encode }}
jsonJSON sûr dans un <script>{{ product.variants | json }}
handleIdentifiant d'URL{{ "Pâtisseries fines" | handle }} → patisseries-fines
asset_urlAdresse d'un fichier du dossier assets/ (versionnée){{ "theme.css" | asset_url }}

Limites