Sylius16 min

Creer un theme Sylius : le guide complet de A a Z

Par Pierre-Arthur Demengel
SyliusThemeTwigFrontendTutoriel

Le theme par defaut de Sylius est fonctionnel, mais aucune boutique serieuse ne peut se permettre de le garder tel quel. Creer un theme personnalise est une etape incontournable. Ce guide vous accompagne de la creation du squelette jusqu'au deploiement.

Architecture d'un theme Sylius

Dans Sylius 2.x, le systeme de theming a evolue. Bootstrap 5 remplace Semantic UI, et les Twig Hooks remplacent les template events. Un theme Sylius s'organise ainsi :

themes/
  MonTheme/
    assets/
      shop/
        js/
          app.js
        css/
          app.scss
        images/
    templates/
      bundles/
        SyliusShopBundle/
          Layout/
            _header.html.twig
            _footer.html.twig
          Product/
            show.html.twig
            index.html.twig
          Cart/
            summary.html.twig
    composer.json

Declarer le theme

Creez un fichier composer.json a la racine de votre theme :

{
  "name": "monentreprise/shop-theme",
  "type": "sylius-theme",
  "description": "Theme personnalise pour MonEntreprise",
  "extra": {
    "sylius-theme": {
      "title": "Mon Theme Custom"
    }
  }
}

Activez-le dans la configuration Sylius :

# config/packages/sylius_theme.yaml
sylius_theme:
  sources:
    filesystem:
      directories:
        - "%kernel.project_dir%/themes"

Les templates essentiels a surcharger

Vous n'avez pas besoin de recreer tous les templates. Voici les prioritaires :

TemplateRolePriorite
Layout/base.html.twigStructure HTML globaleCritique
Layout/_header.html.twigNavigation et logoHaute
Layout/_footer.html.twigPied de pageHaute
Homepage/index.html.twigPage d'accueilHaute
Product/show.html.twigFiche produitCritique
Product/index.html.twigListing produitsHaute
Cart/summary.html.twigPanierMoyenne
Checkout/*.html.twigTunnel d'achatHaute

Configurer Webpack Encore pour le theme

Sylius 2.x utilise Webpack Encore pour compiler les assets. Ajoutez un entrypoint pour votre theme :

// webpack.config.js
const shopConfig = Encore.getWebpackConfig();

Encore.reset();
Encore
  .setOutputPath('public/build/shop-custom/')
  .setPublicPath('/build/shop-custom')
  .addEntry('app', './themes/MonTheme/assets/shop/js/app.js')
  .addStyleEntry('styles', './themes/MonTheme/assets/shop/css/app.scss')
  .enableSassLoader()
  .enablePostCssLoader()
  .enableSourceMaps(!Encore.isProduction())
  .enableVersioning(Encore.isProduction())
;

const customConfig = Encore.getWebpackConfig();
customConfig.name = 'shop-custom';

module.exports = [shopConfig, customConfig];

Surcharger les composants avec les Twig Hooks

Les Twig Hooks sont le mecanisme moderne (Sylius 2.x) pour injecter ou remplacer du contenu dans les templates sans les surcharger completement :

{# Pour ajouter un bandeau promotionnel dans le header #}
{% hook 'sylius_shop.layout.header' with { priority: 100 } %}
  <div class="promo-banner bg-primary text-white text-center py-2">
    Livraison gratuite des 50 EUR d'achat !
  </div>
{% endhook %}

Avantages des Twig Hooks sur les overrides classiques :

  • Pas besoin de copier le template parent en entier
  • Plusieurs hooks peuvent coexister sans conflit
  • Desactivables par configuration (utile pour les plugins)
  • Compatible avec les mises a jour de Sylius

Creer un layout responsive

Partez du template de base et adaptez-le a votre design. Voici un squelette de base responsive :

{# templates/bundles/SyliusShopBundle/Layout/base.html.twig #}
<!DOCTYPE html>
<html lang="{{ sylius.channel.defaultLocale.code[:2] }}">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>{% block title %}{{ sylius.channel.name }}{% endblock %}</title>
  {% block metatags %}{% endblock %}
  {{ encore_entry_link_tags('styles', null, 'shop-custom') }}
</head>
<body class="{% block body_class %}{% endblock %}">
  {% block header %}
    {% include '@SyliusShop/Layout/_header.html.twig' %}
  {% endblock %}

  <main class="container mx-auto px-4 py-8">
    {% block content %}{% endblock %}
  </main>

  {% block footer %}
    {% include '@SyliusShop/Layout/_footer.html.twig' %}
  {% endblock %}

  {{ encore_entry_script_tags('app', null, 'shop-custom') }}
</body>
</html>

Styler les composants critiques

Fiche produit

La fiche produit est la page la plus importante pour la conversion. Structurez-la avec :

  • Un carrousel d'images performant (lazy loading, zoom au survol)
  • Les variantes clairement presentees (couleur, taille) avec indicateur de stock
  • Le prix et les promotions visibles immediatement
  • Un bouton d'ajout au panier sticky sur mobile
  • Les avis clients et le cross-selling en dessous

Listing produits

Le listing doit supporter le filtrage et le tri sans rechargement complet. Utilisez Stimulus (integre a Sylius 2.x) pour les interactions dynamiques.

Bonnes pratiques

  • Ne surchargez que ce qui change : chaque template surcharge est un point de maintenance lors des mises a jour Sylius
  • Utilisez les Twig Hooks pour les ajouts ponctuels plutot que des overrides complets
  • Testez sur tous les breakpoints : mobile (375px), tablette (768px), desktop (1280px+)
  • Optimisez les images : configurez LiipImagine pour generer les bonnes tailles
  • Versionnez votre theme : traitez-le comme un package Composer independant

Besoin d'un theme Sylius sur mesure pour votre boutique ? Contactez-nous pour un devis. Consultez aussi notre guide des template overrides pour les modifications plus ponctuelles.

Questions fréquentes

13 projets livrésGrand-Est & BelgiqueLighthouse >90Disponible immédiatement

Un projet en tête ?

Discutons de votre site web. Réponse garantie sous 24h.

Ou appelez directement :06 95 41 30 25

WhatsApp
Appeler