[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"footer-db":22,"megamenu":44,"$fSvP1qn064PSGbfOEDPSibm3_5gVBqfCkGtJCN6jSDDE":112,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":153,"header-db":220,"$fa__lDvs-guevN_jTJiqPjKQopy6NLFUh1HLlrPAf2qQ":231},{"theme":4},{"colors":5,"typography":13,"ui":17,"defaultColorMode":21},{"primary":6,"secondary":7,"background":8,"foreground":9,"muted":10,"headerBg":11,"footerBg":12,"topBarBg":9,"topBarText":11},"#4F46E5","#0D9488","#F9FAFB","#111827","#6B7280","#ffffff","#020617",{"fontFamily":14,"fontUrl":15,"baseFontSize":16},"Inter, system-ui, sans-serif","https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;0,800;0,900;1,400;1,700&display=swap","16px",{"borderRadius":18,"contentWidth":19,"shadow":20},"lg","7xl",true,"light",{"footer":23},{"theme":24,"description":25,"hours":25,"logo":26,"contact":30,"social":31,"bottomBar":41,"newsletter":42},"dark",null,{"src":27,"href":28,"alt":29},"\u002Flogo-ac.svg","\u002F","Alexandre Carette",{"email":25,"phone":25,"address":25,"cta":25},[32,35,38],{"platform":33,"href":34,"label":33},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":36,"href":37,"label":36},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":39,"href":40,"label":39},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":25},{"show":43,"title":25,"description":25,"placeholder":25,"ctaLabel":25,"consentText":25},false,{"items":45},[46,55,63,71,79,88,96,104],{"id":47,"type":48,"label":49,"href":51,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":25,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":52,"children":53,"psChildren":54},41,"link",{"fr":50},"Expertise","\u002Fexpertise",0,[],[],{"id":56,"type":48,"label":57,"href":59,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":25,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":60,"children":61,"psChildren":62},42,{"fr":58},"Blog","\u002Fblog",1,[],[],{"id":64,"type":48,"label":65,"href":67,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":25,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":68,"children":69,"psChildren":70},43,{"fr":66},"Modules PrestaShop","\u002Fmodules",2,[],[],{"id":72,"type":48,"label":73,"href":75,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":25,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":76,"children":77,"psChildren":78},44,{"fr":74},"Outils IA","\u002Foutils-ia",3,[],[],{"id":80,"type":48,"label":81,"href":83,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":84,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":85,"children":86,"psChildren":87},45,{"fr":82},"Offre Starter ✨","\u002Foffre-starter",{"highlight":20},4,[],[],{"id":89,"type":48,"label":90,"href":92,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":25,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":93,"children":94,"psChildren":95},46,{"fr":91},"Academy","\u002Facademy",5,[],[],{"id":97,"type":48,"label":98,"href":100,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":25,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":101,"children":102,"psChildren":103},47,{"fr":99},"À propos","\u002Fa-propos",6,[],[],{"id":105,"type":48,"label":106,"href":108,"icon":25,"description":25,"badge":25,"groupTitle":25,"style":25,"gridColumns":25,"cssClass":25,"psCategoryId":25,"showPsChildren":43,"position":109,"children":110,"psChildren":111},48,{"fr":107},"Contact","\u002Fcontact",7,[],[],{"title":113,"slug":114,"metaDescription":115,"category":116,"tags":117,"difficulty":125,"psVersions":126,"content":129,"faq":130,"tldr":149,"readingTime":93,"generatedAt":150,"publishDate":150,"relatedArticles":151,"sourceCategory":152},"Images adaptatives dans PrestaShop : srcset, lazy loading et performances","images-adaptatives-prestashop-srcset-lazy-loading-performances","Implémentez les images adaptatives dans PrestaShop avec srcset, lazy loading et LazySizes. Guide complet pour optimiser vos performances visuelles.","performance",[118,119,120,121,122,123,124],"images responsive","lazy loading","srcset","performances web","LazySizes","Core Web Vitals","optimisation images","intermediaire",[127,128],"1.7","8.x","\u003Ch2>Pourquoi les images adaptatives sont indispensables sur PrestaShop\u003C\u002Fh2>\n\u003Cp>Sur une boutique e-commerce, les images représentent souvent \u003Cstrong>60 à 80 % du poids total d'une page\u003C\u002Fstrong>. Charger une image de 800×800 pixels sur un smartphone avec un viewport de 375 pixels est un gaspillage pur de bande passante — et un facteur direct de dégradation du \u003Cstrong>Largest Contentful Paint (LCP)\u003C\u002Fstrong>, l'un des trois Core Web Vitals de Google.\u003C\u002Fp>\n\u003Cp>Les images adaptatives (responsive images) permettent au navigateur de \u003Cstrong>sélectionner automatiquement le format le plus approprié\u003C\u002Fstrong> selon la taille de l'écran, la densité de pixels et la connexion réseau. PrestaShop génère déjà plusieurs déclinaisons d'images (cart_default, small_default, home_default, large_default…), mais le thème par défaut ne les exploite pas toujours de manière optimale.\u003C\u002Fp>\n\u003Ch2>L'attribut srcset : le fondement des images responsive\u003C\u002Fh2>\n\u003Ch3>Principe de fonctionnement\u003C\u002Fh3>\n\u003Cp>L'attribut \u003Ccode>srcset\u003C\u002Fcode> permet de déclarer plusieurs sources d'image avec leurs dimensions ou leur densité de pixels. Le navigateur choisit ensuite la meilleure option.\u003C\u002Fp>\n\u003Cp>Deux syntaxes existent :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Par densité de pixels** (`1x`, `2x`, `3x`) — utile quand l'image a une taille CSS fixe\u003C\u002Fli>\n\u003Cli>**Par largeur réelle** (`300w`, `600w`, `1200w`) — plus flexible, à combiner avec l'attribut `sizes`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Implémentation dans les templates Smarty de PrestaShop\u003C\u002Fh3>\n\u003Cp>Voici une implémentation complète dans un template de listing produit (page catégorie) :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n&lt;img\n  src=\"{Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'cart_default')}\"\n  srcset=\"\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'small_default')} 98w,\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'cart_default')} 125w,\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'home_default')} 250w,\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'medium_default')} 452w,\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'large_default')} 800w\n  \"\n  sizes=\"(max-width: 576px) 50vw, (max-width: 992px) 33vw, 250px\"\n  alt=\"{if !empty($product.cover.legend)}{$product.cover.legend}{else}{$product.name}{\u002Fif}\"\n  width=\"250\"\n  height=\"250\"\n  loading=\"lazy\"\n\u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Points clés de ce code :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>`src` contient un fallback léger (`cart_default`) pour les navigateurs anciens\u003C\u002Fli>\n\u003Cli>`srcset` déclare toutes les déclinaisons générées par PrestaShop avec leur largeur réelle en pixels\u003C\u002Fli>\n\u003Cli>`sizes` indique au navigateur quelle taille l'image occupera réellement selon le viewport\u003C\u002Fli>\n\u003Cli>`width` et `height` sont déclarés pour éviter le **Cumulative Layout Shift (CLS)**\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Syntaxe par densité de pixels (cas simple)\u003C\u002Fh3>\n\u003Cp>Si vos images ont toujours la même taille CSS, la syntaxe par densité est plus lisible :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n&lt;img\n  src=\"{Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'home_default')}\"\n  srcset=\"{Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'home_default')} 1x,\n          {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'large_default')} 2x\"\n  alt=\"{$product.name}\"\n  width=\"302\"\n  height=\"302\"\n\u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cette approche est idéale pour les écrans Retina (2x) et permet de servir une image plus nette sans impacter les écrans standard.\u003C\u002Fp>\n\u003Ch2>Lazy loading : ne charger que ce qui est visible\u003C\u002Fh2>\n\u003Ch3>Le lazy loading natif du navigateur\u003C\u002Fh3>\n\u003Cp>Depuis 2020, tous les navigateurs modernes supportent l'attribut \u003Ccode>loading=\"lazy\"\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-html\">\n&lt;img src=\"mon-image.jpg\" loading=\"lazy\" alt=\"Description\" \u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>C'est la méthode la plus simple et elle ne nécessite aucune librairie JavaScript. \u003Cstrong>Attention cependant\u003C\u002Fstrong> : ne mettez jamais \u003Ccode>loading=\"lazy\"\u003C\u002Fcode> sur les images au-dessus de la ligne de flottaison (hero, logo, première image produit visible), car cela retarderait le LCP.\u003C\u002Fp>\n\u003Ch3>LazySizes : une solution plus complète\u003C\u002Fh3>\n\u003Cp>Pour un contrôle plus fin, la librairie \u003Cstrong>LazySizes\u003C\u002Fstrong> offre des fonctionnalités supplémentaires :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Support du `srcset` en mode lazy (via `data-srcset`)\u003C\u002Fli>\n\u003Cli>Chargement progressif avec placeholder basse résolution\u003C\u002Fli>\n\u003Cli>Support des iframes et des vidéos\u003C\u002Fli>\n\u003Cli>Plugins pour le blur-up, le LQIP et le responsive images avancé\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>#### Installation dans PrestaShop\u003C\u002Fp>\n\u003Col>\n\u003Cli>Téléchargez LazySizes depuis le dépôt GitHub officiel\u003C\u002Fli>\n\u003Cli>Placez le fichier `lazysizes.min.js` dans le dossier `assets\u002Fjs\u002F` de votre thème\u003C\u002Fli>\n\u003Cli>Incluez-le dans votre `theme.yml` ou directement dans le `\u003Chead>` :\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-yaml\">\n# themes\u002Fvotre-theme\u002Fconfig\u002Ftheme.yml\nassets:\n  js:\n    all:\n      - id: lazysizes\n        uri: assets\u002Fjs\u002Flazysizes.min.js\n        priority: 100\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>#### Utilisation dans les templates\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n&lt;img\n  src=\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' viewBox='0 0 250 250'%3E%3C\u002Fsvg%3E\"\n  data-src=\"{Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'home_default')}\"\n  data-srcset=\"\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'small_default')} 98w,\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'home_default')} 250w,\n    {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'large_default')} 800w\n  \"\n  data-sizes=\"auto\"\n  class=\"lazyload\"\n  alt=\"{if !empty($product.cover.legend)}{$product.cover.legend}{else}{$product.name}{\u002Fif}\"\n  width=\"250\"\n  height=\"250\"\n\u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Ce qui change par rapport au srcset natif :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>`src` contient un SVG transparent inline (placeholder sans requête HTTP)\u003C\u002Fli>\n\u003Cli>Les vrais attributs sont préfixés par `data-` (`data-src`, `data-srcset`)\u003C\u002Fli>\n\u003Cli>`data-sizes=\"auto\"` laisse LazySizes calculer automatiquement la taille\u003C\u002Fli>\n\u003Cli>La classe `lazyload` active le comportement de chargement différé\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Configuration des formats d'image dans PrestaShop 8.x\u003C\u002Fh2>\n\u003Cp>Avant d'implémenter le responsive, assurez-vous que vos formats d'image sont correctement configurés.\u003C\u002Fp>\n\u003Ch3>Vérifier les types d'images existants\u003C\u002Fh3>\n\u003Cp>Dans le back-office : \u003Cstrong>Design > Images\u003C\u002Fstrong> (ou \u003Cstrong>Apparence > Images\u003C\u002Fstrong> selon la version).\u003C\u002Fp>\n\u003Cp>Les formats par défaut de PrestaShop :\u003C\u002Fp>\n\u003Ctr>\u003Cth>Nom\u003C\u002Fth>\u003Cth>Largeur\u003C\u002Fth>\u003Cth>Hauteur\u003C\u002Fth>\u003Cth>Utilisé pour\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>cart_default\u003C\u002Fth>\u003Cth>125\u003C\u002Fth>\u003Cth>125\u003C\u002Fth>\u003Cth>Panier\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>small_default\u003C\u002Fth>\u003Cth>98\u003C\u002Fth>\u003Cth>98\u003C\u002Fth>\u003Cth>Miniatures\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>home_default\u003C\u002Fth>\u003Cth>250\u003C\u002Fth>\u003Cth>250\u003C\u002Fth>\u003Cth>Listing catégorie\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>medium_default\u003C\u002Fth>\u003Cth>452\u003C\u002Fth>\u003Cth>452\u003C\u002Fth>\u003Cth>Fiche produit secondaire\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>large_default\u003C\u002Fth>\u003Cth>800\u003C\u002Fth>\u003Cth>800\u003C\u002Fth>\u003Cth>Fiche produit principale\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ch3>Régénérer les miniatures\u003C\u002Fh3>\n\u003Cp>Après toute modification des dimensions, régénérez via le back-office ou en CLI :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">\nphp bin\u002Fconsole prestashop:image:regenerate --type=products\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Sur PrestaShop 8.x, cette commande Symfony remplace l'ancien script \u003Ccode>images.php\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2>Format WebP : le gain de performance majeur\u003C\u002Fh2>\n\u003Cp>PrestaShop 8.x supporte nativement la génération d'images \u003Cstrong>WebP\u003C\u002Fstrong>, un format qui offre une \u003Cstrong>réduction de 25 à 35 %\u003C\u002Fstrong> par rapport au JPEG à qualité visuelle équivalente.\u003C\u002Fp>\n\u003Cp>Activation dans le back-office : \u003Cstrong>Design > Images > Générer les images au format WebP\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>Pour exploiter le WebP avec un fallback, utilisez la balise \u003Ccode>\u003Cpicture>\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n&lt;picture&gt;\n  &lt;source\n    type=\"image\u002Fwebp\"\n    srcset=\"{Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'home_default', 'webp')} 1x,\n            {Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'large_default', 'webp')} 2x\"\n  \u002F&gt;\n  &lt;img\n    src=\"{Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'home_default')}\"\n    srcset=\"{Link::getImageLink($product.link_rewrite, $img_cover.id_image, 'large_default')} 2x\"\n    alt=\"{$product.name}\"\n    width=\"250\"\n    height=\"250\"\n    loading=\"lazy\"\n  \u002F&gt;\n&lt;\u002Fpicture&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Checklist d'optimisation complète\u003C\u002Fh2>\n\u003Cp>Pour tirer le maximum de vos images PrestaShop :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Déclarez `width` et `height`** sur chaque balise `\u003Cimg>` pour éviter le CLS\u003C\u002Fli>\n\u003Cli>**Utilisez `srcset` + `sizes`** sur toutes les images de listing et de fiche produit\u003C\u002Fli>\n\u003Cli>**Activez `loading=\"lazy\"`** sur toutes les images sous la ligne de flottaison\u003C\u002Fli>\n\u003Cli>**Ne lazy-loadez jamais** l'image hero ou la première image visible (impact LCP)\u003C\u002Fli>\n\u003Cli>**Activez le WebP** dans le back-office PrestaShop 8.x\u003C\u002Fli>\n\u003Cli>**Compressez vos originaux** avant upload (TinyPNG, Squoosh, ou un module dédié)\u003C\u002Fli>\n\u003Cli>**Ajoutez un CDN** si votre catalogue dépasse 500 produits\u003C\u002Fli>\n\u003Cli>**Testez avec Lighthouse** et visez un score Performance > 90\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Erreurs fréquentes à éviter\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>**Oublier l'attribut `alt`** : impact SEO et accessibilité. Utilisez le nom du produit et la marque, jamais un texte générique\u003C\u002Fli>\n\u003Cli>**Mettre le même `src` et `data-src`** : provoque un double chargement avec LazySizes\u003C\u002Fli>\n\u003Cli>**Utiliser `srcset` sans `sizes`** en mode largeur (`w`) : le navigateur suppose `sizes=\"100vw\"` et charge toujours l'image la plus grande\u003C\u002Fli>\n\u003Cli>**Lazy-loader les images above-the-fold** : dégrade le LCP au lieu de l'améliorer\u003C\u002Fli>\n\u003C\u002Ful>",[131,134,137,140,143,146],{"q":132,"a":133},"Comment activer les images responsive dans PrestaShop sans module ?","Il suffit d'ajouter l'attribut srcset dans les templates Smarty de votre thème. PrestaShop génère déjà plusieurs déclinaisons d'images (small_default, home_default, large_default…). En les déclarant dans le srcset avec leur largeur en pixels, le navigateur choisit automatiquement la taille optimale. Aucun module n'est nécessaire, c'est une modification purement template.",{"q":135,"a":136},"Faut-il utiliser LazySizes ou le lazy loading natif du navigateur ?","En 2024-2026, le lazy loading natif (loading=\"lazy\") est supporté par plus de 95 % des navigateurs et suffit pour la majorité des boutiques. LazySizes reste pertinent si vous avez besoin de fonctionnalités avancées comme le calcul automatique des sizes, le blur-up progressif ou le support de navigateurs très anciens. Pour une boutique standard, le lazy loading natif est recommandé car il ne nécessite aucun JavaScript supplémentaire.",{"q":138,"a":139},"Quelle est la différence entre srcset avec 'w' et srcset avec 'x' ?","La syntaxe en 'w' (ex: image.jpg 800w) déclare la largeur réelle de l'image en pixels et doit être combinée avec l'attribut sizes pour que le navigateur calcule le meilleur choix. La syntaxe en 'x' (ex: image.jpg 2x) indique la densité de pixels cible et convient quand l'image a une taille CSS fixe. Pour les listings produits où la taille varie selon le viewport, privilégiez la syntaxe en 'w'.",{"q":141,"a":142},"Comment vérifier que mes images responsive fonctionnent correctement ?","Ouvrez les DevTools de Chrome (F12), onglet Network, filtrez par 'Img'. Redimensionnez la fenêtre et rechargez la page : vous devez voir des fichiers différents se charger selon la largeur. Vous pouvez aussi utiliser l'onglet Lighthouse pour auditer les performances et vérifier qu'aucune image n'est surdimensionnée par rapport à son affichage réel.",{"q":144,"a":145},"Le format WebP est-il compatible avec toutes les versions de PrestaShop ?","La génération native de WebP est disponible à partir de PrestaShop 8.0. Sur PrestaShop 1.7, il faut passer par un module tiers ou gérer la conversion côté serveur (avec mod_pagespeed ou un script de conversion). Dans tous les cas, utilisez la balise \u003Cpicture> avec un fallback JPEG pour garantir la compatibilité avec les navigateurs qui ne supportent pas encore le WebP.",{"q":147,"a":148},"Pourquoi mes images PrestaShop ralentissent mon score Lighthouse ?","Les causes les plus fréquentes sont : des images non compressées à l'upload, l'absence de srcset qui force le chargement de la plus grande déclinaison, le lazy loading manquant sur les images hors écran, et l'utilisation du format JPEG au lieu du WebP. Corrigez ces quatre points et vous gagnerez typiquement 15 à 30 points sur le score Performance de Lighthouse.","Les images adaptatives dans PrestaShop s'implémentent via l'attribut srcset dans les templates Smarty, combiné au lazy loading natif ou à LazySizes pour le chargement différé. Sur PrestaShop 8.x, activez également le WebP pour un gain de poids de 25 à 35 %.","2026-03-21T15:10:31.000Z",[],"PrestaShop pour les développeurs",{"columns":154},[155,167,197,213],{"title":156,"links":157},"Plateforme",[158,160,163,164],{"label":159,"href":83,"external":43},"Offre Starter (2 500 €)",{"label":161,"href":162,"external":43},"Devenir Ambassadeur","\u002Fambassadeur",{"label":66,"href":67,"external":43},{"label":165,"href":166,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":168,"links":169},"Le Synedre",[170,173,176,179,182,185,188,191,194],{"label":171,"href":172,"external":43},"L'histoire","\u002Fsynedre",{"label":174,"href":175,"external":43},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":177,"href":178,"external":43},"L'équipe","\u002Fequipe",{"label":180,"href":181,"external":43},"Le réacteur en direct","\u002Freacteur",{"label":183,"href":184,"external":43},"Le Drill (entraînement)","\u002Fdrill",{"label":186,"href":187,"external":43},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":189,"href":190,"external":43},"Les agents IA","\u002Fagents-ia",{"label":192,"href":193,"external":43},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":195,"href":196,"external":43},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":198,"links":199},"Ressources",[200,201,202,205,207,210],{"label":58,"href":59,"external":43},{"label":91,"href":92,"external":43},{"label":203,"href":204,"external":43},"Dictionnaire","\u002Fdictionnaire",{"label":206,"href":51,"external":43},"Expertise PrestaShop",{"label":208,"href":209,"external":43},"Flywheel","\u002Fflywheel",{"label":211,"href":212,"external":43},"Manifeste","\u002Fmanifeste",{"title":99,"links":214},[215,216,219],{"label":29,"href":100,"external":43},{"label":217,"href":218,"external":43},"Dossier de presse","\u002Fpresse",{"label":107,"href":108,"external":43},{"header":221},{"logo":222,"topBar":225,"contactEmail":228,"features":229,"navBar":25},{"src":27,"alt":223,"text":29,"href":28,"class":224},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":25,"messageMobile":25,"showLanguages":43,"align":226,"languages":227},"left",[],"contact@alexandrecarette.fr",{"showSearch":43,"showWishlist":43,"showLogin":20,"showContact":43,"showCart":43,"showBlogLink":43,"showContactLink":43,"showGiftcardLink":43,"showStoresLink":43,"stickyHeader":20,"headerLayout":230},"inline",{"academy":232,"blog":233,"expertise":244},[],[234,238,241],{"title":235,"url":236,"score":60,"type":237},"Docker Compose PrestaShop : configuration production prête à déployer","\u002Fblog\u002Fdevops\u002Fdocker\u002Fdocker-compose-prestashop-production","blog",{"title":239,"url":240,"score":60,"type":237},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back",{"title":242,"url":243,"score":60,"type":237},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",[]]