Débogage Liquid
Guide pour identifier, comprendre et résoudre les problèmes courants dans le code Liquid de votre thème Shopify.
Vue d'ensemble
Le débogage Liquid permet de :
- Identifier les erreurs de syntaxe
- Comprendre pourquoi des données ne s'affichent pas
- Optimiser les performances
- Vérifier la logique conditionnelle
- Tracer le flux de données
Outils de débogage
1. Console Liquid dans l'éditeur de thème
L'éditeur de thème Shopify offre une console pour tester le code Liquid :
- Aller dans En ligne → Thèmes → Personnaliser
- Cliquer sur "..." → Thème éditeur de code
- Utiliser la console pour tester des expressions Liquid
2. Extension VS Code
Shopify Liquid
Extension officielle pour VS Code :
- Syntaxe highlighting
- Autocomplétion
- Validation de syntaxe
- Snippets utiles
Installation :
code --install-extension shopify.liquid3. Outils en ligne
Liquid Parser
- Liquid Parser (opens in a new tab) : Tester du code Liquid en ligne
Techniques de débogage
1. Affichage de valeurs avec {{ }}
La méthode la plus simple pour voir la valeur d'une variable :
{% comment %} Afficher une variable {% endcomment %}
{{ product.title }}
{% comment %} Afficher plusieurs valeurs {% endcomment %}
Produit: {{ product.title }}
Prix: {{ product.price | money }}
ID: {{ product.id }}2. Debug avec inspect
Le filtre inspect affiche la structure complète d'un objet :
{% comment %} Afficher toutes les propriétés d'un produit {% endcomment %}
{{ product | inspect }}
{% comment %} Afficher les propriétés d'une collection {% endcomment %}
{{ collection | inspect }}
{% comment %} Afficher les settings d'une section {% endcomment %}
{{ section.settings | inspect }}Exemple de sortie :
{"id":123456,"title":"Produit","handle":"produit","vendor":"Marque",...}3. Vérifier si une variable existe
{% comment %} Vérifier si une variable est définie {% endcomment %}
{% if product %}
Le produit existe : {{ product.title }}
{% else %}
Le produit n'existe pas
{% endif %}
{% comment %} Vérifier si une propriété existe {% endcomment %}
{% if product.metafields.custom.field %}
Metafield existe : {{ product.metafields.custom.field }}
{% else %}
Metafield n'existe pas
{% endif %}4. Vérifier si une valeur est vide
{% comment %} Vérifier si une valeur est vide {% endcomment %}
{% if product.description != blank %}
Description : {{ product.description }}
{% else %}
Pas de description
{% endif %}
{% comment %} Alternative avec unless {% endcomment %}
{% unless product.description == blank %}
Description : {{ product.description }}
{% endunless %}5. Compteur de boucles
Pour déboguer les boucles, afficher l'index :
{% for product in collection.products %}
{% comment %} Afficher l'index et le produit {% endcomment %}
Index: {{ forloop.index }} - {{ product.title }}
{% comment %} Vérifier si c'est le premier ou dernier {% endcomment %}
{% if forloop.first %}
Premier produit
{% endif %}
{% if forloop.last %}
Dernier produit
{% endif %}
{% endfor %}6. Limiter les boucles pour le debug
Limiter le nombre d'itérations pour tester :
{% comment %} Limiter à 3 produits pour le debug {% endcomment %}
{% assign limit = 3 %}
{% for product in collection.products limit: limit %}
{{ product.title }}
{% endfor %}Problèmes courants et solutions
1. Variable non définie ou vide
Problème : Variable retourne vide
{% comment %} ❌ Problème {% endcomment %}
{{ product.custom_field }}Solution :
{% comment %} ✅ Vérifier d'abord si la variable existe {% endcomment %}
{% if product.custom_field != blank %}
{{ product.custom_field }}
{% else %}
Valeur par défaut ou message d'erreur
{% endif %}
{% comment %} ✅ Utiliser assign avec une valeur par défaut {% endcomment %}
{% assign custom_field = product.custom_field | default: 'Valeur par défaut' %}
{{ custom_field }}2. Erreurs de syntaxe dans les conditions
Problème : Condition ne fonctionne pas
{% comment %} ❌ Problème : comparaison incorrecte {% endcomment %}
{% if product.price == 0 %}
Gratuit
{% endif %}Solution :
{% comment %} ✅ Utiliser les bonnes comparaisons {% endcomment %}
{% if product.price == 0 %}
Gratuit
{% elsif product.compare_at_price > product.price %}
En promotion
{% endif %}
{% comment %} ✅ Pour les strings {% endcomment %}
{% if product.vendor == "Nike" %}
Produit Nike
{% endif %}
{% comment %} ✅ Vérifier si contient {% endcomment %}
{% if product.tags contains "nouveau" %}
Nouveau produit
{% endif %}3. Problèmes avec les filtres
Problème : Filtre ne fonctionne pas comme attendu
{% comment %} ❌ Problème : format incorrect {% endcomment %}
{{ product.price | money }}Solution :
{% comment %} ✅ Vérifier les paramètres du filtre {% endcomment %}
{{ product.price | money }}
{% comment %} ✅ Avec paramètres {% endcomment %}
{{ product.price | money_with_currency }}
{% comment %} ✅ Debug : voir la valeur avant filtre {% endcomment %}
Prix brut: {{ product.price }}
Prix formaté: {{ product.price | money }}
{% comment %} ✅ Tester différents formats {% endcomment %}
{{ product.price | divided_by: 100.0 | round: 2 }}4. Problèmes avec les boucles
Problème : Boucle ne s'exécute pas
{% comment %} ❌ Problème : collection vide {% endcomment %}
{% for product in collection.products %}
{{ product.title }}
{% endfor %}Solution :
{% comment %} ✅ Vérifier si la collection existe et a des produits {% endcomment %}
{% if collection.products.size > 0 %}
{% for product in collection.products %}
{{ product.title }}
{% endfor %}
{% else %}
Aucun produit dans cette collection
{% endif %}
{% comment %} ✅ Debug : afficher la taille {% endcomment %}
Nombre de produits: {{ collection.products.size }}
{% comment %} ✅ Vérifier la collection {% endcomment %}
{{ collection | inspect }}5. Problèmes avec les metafields
Problème : Metafield ne s'affiche pas
{% comment %} ❌ Problème : chemin incorrect {% endcomment %}
{{ product.metafields.custom.color }}Solution :
{% comment %} ✅ Debug : voir la structure complète {% endcomment %}
{{ product.metafields | inspect }}
{% comment %} ✅ Vérifier le namespace et la clé {% endcomment %}
{% if product.metafields.custom.color %}
{{ product.metafields.custom.color }}
{% endif %}
{% comment %} ✅ Afficher tous les metafields custom {% endcomment %}
{% for metafield in product.metafields.custom %}
{{ metafield[0] }}: {{ metafield[1] }}
{% endfor %}6. Problèmes avec les sections et blocks
Problème : Block ne s'affiche pas
{% comment %} ❌ Problème : block non vérifié {% endcomment %}
{% for block in section.blocks %}
{{ block.settings.text }}
{% endfor %}Solution :
{% comment %} ✅ Vérifier le type de block {% endcomment %}
{% for block in section.blocks %}
{% case block.type %}
{% when 'text' %}
{{ block.settings.text }}
{% when 'image' %}
<img src="{{ block.settings.image | image_url }}" alt="{{ block.settings.alt }}">
{% endcase %}
{% endfor %}
{% comment %} ✅ Debug : afficher tous les blocks {% endcomment %}
{% for block in section.blocks %}
Block type: {{ block.type }}
Block settings: {{ block.settings | inspect }}
{% endfor %}Techniques avancées
1. Créer un snippet de debug
Créer snippets/debug.liquid :
{% comment %}
Snippet de debug pour afficher des informations
Usage:
{% render 'debug', variable: product, label: 'Product' %}
{% endcomment %}
{% if variable != blank %}
<div class="debug-info" style="background: #f0f0f0; padding: 1rem; margin: 1rem 0; border-left: 4px solid #007bff;">
<strong>{{ label | default: 'Debug' }}:</strong>
<pre style="margin: 0.5rem 0; overflow: auto;">{{ variable | inspect }}</pre>
</div>
{% else %}
<div class="debug-info" style="background: #fff3cd; padding: 1rem; margin: 1rem 0; border-left: 4px solid #ffc107;">
<strong>{{ label | default: 'Debug' }}:</strong> Variable vide ou non définie
</div>
{% endif %}Utilisation :
{% render 'debug', variable: product, label: 'Product Info' %}
{% render 'debug', variable: collection, label: 'Collection Info' %}2. Mode debug conditionnel
Créer un setting pour activer/désactiver le debug :
{% comment %} Dans le schema de la section {% endcomment %}
{
"type": "checkbox",
"id": "enable_debug",
"label": "Activer le mode debug",
"default": false
}
{% comment %} Dans le code Liquid {% endcomment %}
{% if section.settings.enable_debug %}
<div class="debug-mode">
{{ product | inspect }}
{{ collection | inspect }}
</div>
{% endif %}3. Logger les valeurs dans la console
Pour les valeurs complexes, utiliser JavaScript :
<script>
console.log('Product Data:', {
id: {{ product.id | json }},
title: {{ product.title | json }},
price: {{ product.price | json }},
variants: {{ product.variants | json }}
});
</script>4. Afficher les chemins de fichiers
Pour déboguer les inclusions de snippets :
{% comment %} Vérifier si un snippet existe {% endcomment %}
{% if snippets['mm-product-card'] %}
Snippet existe
{% else %}
Snippet n'existe pas
{% endif %}Checklist de débogage
Avant de commencer
- Vérifier la syntaxe Liquid (pas d'erreurs dans l'éditeur)
- Vérifier que les fichiers sont sauvegardés
- Vider le cache du navigateur
- Vérifier la console du navigateur pour les erreurs JS
Étapes de débogage
-
Identifier le problème
- Qu'est-ce qui ne fonctionne pas ?
- Quand est-ce que ça se produit ?
- Sur quelle page/section ?
-
Isoler le code
- Simplifier le code au maximum
- Tester avec des valeurs hardcodées
- Vérifier chaque variable individuellement
-
Vérifier les données
- Les données existent-elles ?
- Les données ont-elles le bon format ?
- Les données sont-elles accessibles ?
-
Tester les conditions
- Les conditions sont-elles correctes ?
- Les opérateurs de comparaison sont-ils bons ?
- Les valeurs par défaut sont-elles définies ?
-
Vérifier les filtres
- Le filtre est-il correctement utilisé ?
- Les paramètres du filtre sont-ils bons ?
- Y a-t-il une alternative au filtre ?
Erreurs courantes et solutions rapides
Erreur : "Liquid syntax error"
Causes possibles :
- Balises non fermées :
{% if %}sans{% endif %} - Filtres mal formés :
| filter paramau lieu de| filter: param - Variables mal référencées
Solution : Vérifier la syntaxe avec un validateur Liquid
Erreur : Variable retourne null ou vide
Causes possibles :
- Variable non définie dans le contexte
- Chemin incorrect (ex:
product.customau lieu deproduct.metafields.custom) - Données non disponibles pour l'objet
Solution : Utiliser inspect pour voir la structure, vérifier le contexte
Erreur : Boucle infinie ou très lente
Causes possibles :
- Boucle sans limite sur une grande collection
- Récursion dans les snippets
- Trop de produits chargés
Solution : Ajouter des limites, utiliser la pagination