[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$f0XurlDxM3rL3nBE30JJuFrkfyf1ySCfDYYZbuHUStko":22,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":60,"megamenu":141,"footer-db":197,"$fg5SiKgVOXHKGwefnRXotJcD0HXcOUoG-Z5Y-JkibGnI":215,"header-db":229},{"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",{"title":23,"slug":24,"metaDescription":25,"category":26,"tags":27,"difficulty":33,"psVersions":34,"content":38,"faq":39,"tldr":55,"readingTime":56,"generatedAt":57,"publishDate":57,"relatedArticles":58,"sourceCategory":59},"Récupérer des variables dans les URLs simplifiées PrestaShop","recuperer-variables-urls-simplifiees-prestashop","Comment fonctionnent les URLs simplifiées PrestaShop, récupérer des paramètres dynamiques et créer des règles de réécriture personnalisées avec le Dispatcher.","developpement",[28,29,30,31,32],"url-rewriting","dispatcher","htaccess","routing","seo","avance",[35,36,37],"1.6","1.7","8.x","\u003Ch1>Récupérer des variables dans les URLs simplifiées PrestaShop\u003C\u002Fh1>\n\u003Cp>Les URLs simplifiées (friendly URLs) de PrestaShop transforment des adresses cryptiques comme \u003Ccode>index.php?id_product=42&controller=product\u003C\u002Fcode> en URLs lisibles telles que \u003Ccode>\u002Ftshirt-bleu-42.html\u003C\u002Fcode>. Ce mécanisme repose sur un système de \u003Cstrong>routes internes\u003C\u002Fstrong> qui associe chaque pattern d'URL à un contrôleur et à un identifiant. Lorsqu'on souhaite ajouter des paramètres personnalisés dans ces URLs, il faut comprendre en profondeur le fonctionnement du Dispatcher et des règles de réécriture.\u003C\u002Fp>\n\u003Ch2>Comment PrestaShop résout une URL simplifiée\u003C\u002Fh2>\n\u003Cp>Chaque type de page possède un schéma d'URL défini dans la table \u003Ccode>ps_meta\u003C\u002Fcode> et géré par la classe \u003Ccode>Dispatcher\u003C\u002Fcode>. Voici les routes par défaut :\u003C\u002Fp>\n\u003Ctr>\u003Cth>Type de page\u003C\u002Fth>\u003Cth>Route par défaut\u003C\u002Fth>\u003Cth>Identifiant\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Produit\u003C\u002Fth>\u003Cth>`{category:\u002F}{id}-{rewrite}.html`\u003C\u002Fth>\u003Cth>`id_product`\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Catégorie\u003C\u002Fth>\u003Cth>`{id}-{rewrite}`\u003C\u002Fth>\u003Cth>`id_category`\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>CMS\u003C\u002Fth>\u003Cth>`content\u002F{id}-{rewrite}`\u003C\u002Fth>\u003Cth>`id_cms`\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Fournisseur\u003C\u002Fth>\u003Cth>`supplier\u002F{id}-{rewrite}`\u003C\u002Fth>\u003Cth>`id_supplier`\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Fabricant\u003C\u002Fth>\u003Cth>`brand\u002F{id}-{rewrite}`\u003C\u002Fth>\u003Cth>`id_manufacturer`\u003C\u002Fth>\u003C\u002Ftr>\n\u003Cp>Le point essentiel : \u003Cstrong>l'identifiant numérique est toujours présent dans l'URL\u003C\u002Fstrong>, même en mode simplifié. C'est lui qui permet à PrestaShop de retrouver l'entité correspondante en base de données. Supprimer cet ID de l'URL nécessite un mécanisme de réécriture alternatif.\u003C\u002Fp>\n\u003Ch2>Le rôle du Dispatcher\u003C\u002Fh2>\n\u003Cp>Le \u003Ccode>Dispatcher\u003C\u002Fcode> (classe \u003Ccode>classes\u002FDispatcher.php\u003C\u002Fcode>) est le routeur central de PrestaShop. À chaque requête entrante, il :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Parse l'URL** en la comparant aux routes enregistrées via des expressions régulières\u003C\u002Fli>\n\u003Cli>**Extrait les variables** (ID, rewrite, etc.) depuis les segments de l'URL\u003C\u002Fli>\n\u003Cli>**Charge le contrôleur** approprié avec ces paramètres dans `$_GET`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Exemple simplifié du fonctionnement interne du Dispatcher\n\u002F\u002F Route : {id}-{rewrite}.html\n\u002F\u002F URL reçue : 42-tshirt-bleu.html\n\u002F\u002F Regex générée : ^([0-9]+)-([a-zA-Z0-9-]+)\\.html$\n\u002F\u002F Résultat : $_GET['id_product'] = 42\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Les routes sont définies dans \u003Cstrong>Back Office > Préférences > SEO & URLs\u003C\u002Fstrong> (PrestaShop 1.6\u002F1.7) ou \u003Cstrong>Back Office > Paramètres de la boutique > Trafic & SEO\u003C\u002Fstrong> (PrestaShop 8.x).\u003C\u002Fp>\n\u003Ch2>Ajouter un paramètre personnalisé dans une URL simplifiée\u003C\u002Fh2>\n\u003Cp>Pour injecter une variable supplémentaire dans le schéma d'URL, trois approches sont possibles.\u003C\u002Fp>\n\u003Ch3>Approche 1 : Modifier la route dans le back office\u003C\u002Fh3>\n\u003Cp>PrestaShop permet d'utiliser des \u003Cstrong>mots-clés prédéfinis\u003C\u002Fstrong> dans les schémas de routes. Pour les produits par exemple, les mots-clés disponibles incluent \u003Ccode>{id}\u003C\u002Fcode>, \u003Ccode>{rewrite}\u003C\u002Fcode>, \u003Ccode>{ean13}\u003C\u002Fcode>, \u003Ccode>{category}\u003C\u002Fcode>, \u003Ccode>{reference}\u003C\u002Fcode>, \u003Ccode>{manufacturer_name}\u003C\u002Fcode>, etc.\u003C\u002Fp>\n\u003Cp>Si votre variable correspond à un mot-clé existant, il suffit de l'ajouter dans le schéma :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\n{category}\u002F{reference}-{rewrite}-{id}.html\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cela produira une URL comme : \u003Ccode>\u002Fvetements\u002FREF001-tshirt-bleu-42.html\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3>Approche 2 : Enregistrer une route personnalisée via un module\u003C\u002Fh3>\n\u003Cp>Pour des variables qui ne correspondent à aucun mot-clé existant, il faut enregistrer une route personnalisée dans un module via le hook \u003Ccode>moduleRoutes\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Dans votre module\npublic function hookModuleRoutes()\n{\n    return [\n        'module-monmodule-mapage' =&gt; [\n            'rule' =&gt; 'custom\u002F{variable_custom}\u002F{id_entity}',\n            'controller' =&gt; 'mapage',\n            'keywords' =&gt; [\n                'variable_custom' =&gt; [\n                    'regexp' =&gt; '[a-zA-Z0-9_-]+',\n                    'param' =&gt; 'variable_custom',\n                ],\n                'id_entity' =&gt; [\n                    'regexp' =&gt; '[0-9]+',\n                    'param' =&gt; 'id_entity',\n                ],\n            ],\n            'params' =&gt; [\n                'fc' =&gt; 'module',\n                'module' =&gt; 'monmodule',\n            ],\n        ],\n    ];\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Dans le contrôleur front du module, la variable est ensuite récupérable normalement :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Dans controllers\u002Ffront\u002Fmapage.php\n$variableCustom = Tools::getValue('variable_custom');\n$idEntity = (int) Tools::getValue('id_entity');\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Approche 3 : Réécriture directe via .htaccess\u003C\u002Fh3>\n\u003Cp>Pour des cas spécifiques où l'on souhaite transformer une URL externe en paramètres internes sans toucher au Dispatcher, on peut ajouter des règles dans le \u003Ccode>.htaccess\u003C\u002Fcode> \u003Cstrong>avant\u003C\u002Fstrong> les règles PrestaShop :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-apache\">\n# Règle personnalisée AVANT les règles PrestaShop\n# Transforme \u002Fmon-prefixe\u002Fvaleur-param\u002F42 en index.php?controller=product&id_product=42&custom=valeur-param\nRewriteRule ^mon-prefixe\u002F([a-zA-Z0-9_-]+)\u002F([0-9]+)$ index.php?controller=product&id_product=$2&custom=$1 [QSA,L]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Attention\u003C\u002Fstrong> : cette méthode est fragile car PrestaShop régénère le \u003Ccode>.htaccess\u003C\u002Fcode> lors de certaines opérations en back office. Pour pérenniser vos règles, utilisez plutôt l'approche module.\u003C\u002Fp>\n\u003Ch2>Bonnes pratiques pour les URLs personnalisées\u003C\u002Fh2>\n\u003Ch3>Vider le cache des routes\u003C\u002Fh3>\n\u003Cp>Après toute modification de route, il est impératif de :\u003C\u002Fp>\n\u003Col>\n\u003Cli>Vider le cache PrestaShop (Back Office > Paramètres avancés > Performances)\u003C\u002Fli>\n\u003Cli>Régénérer le `.htaccess` (SEO & URLs > cocher \"URL simplifiée\" et sauvegarder)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-bash\">\n# Ou en ligne de commande (PrestaShop 8.x)\nphp bin\u002Fconsole cache:clear --env=prod\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Valider les expressions régulières\u003C\u002Fh3>\n\u003Cp>Une regex mal formée dans une route peut bloquer l'ensemble du site. Testez toujours vos patterns :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Test rapide d'une regex de route\n$pattern = '#^custom\u002F([a-zA-Z0-9_-]+)\u002F([0-9]+)$#';\n$url = 'custom\u002Fma-variable\u002F42';\nif (preg_match($pattern, $url, $matches)) {\n    echo 'Variable : ' . $matches[1]; \u002F\u002F ma-variable\n    echo 'ID : ' . $matches[2];       \u002F\u002F 42\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Éviter les conflits de routes\u003C\u002Fh3>\n\u003Cp>Les routes sont évaluées dans un ordre précis. Une route trop permissive (comme \u003Ccode>{rewrite}\u003C\u002Fcode> sans préfixe) peut capturer des URLs destinées à d'autres contrôleurs. Préfixez toujours vos routes personnalisées avec un segment unique.\u003C\u002Fp>\n\u003Ch2>Cas pratique : URL sans ID numérique\u003C\u002Fh2>\n\u003Cp>Certains marchands souhaitent supprimer l'ID des URLs pour des raisons esthétiques ou SEO. PrestaShop ne le supporte pas nativement car le Dispatcher a besoin de cet identifiant pour résoudre la page.\u003C\u002Fp>\n\u003Cp>La solution consiste à intercepter la requête en amont, résoudre le \u003Ccode>rewrite\u003C\u002Fcode> en ID via une requête en base, puis injecter l'ID dans \u003Ccode>$_GET\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Override de Dispatcher::dispatch() ou via un module\npublic function hookActionDispatcher($params)\n{\n    $rewrite = Tools::getValue('rewrite');\n    if ($rewrite && !Tools::getValue('id_product')) {\n        $id = Db::getInstance()-&gt;getValue(\n            'SELECT id_product FROM ' . _DB_PREFIX_ . 'product_lang\n             WHERE link_rewrite = \"' . pSQL($rewrite) . '\"\n             AND id_lang = ' . (int) Context::getContext()-&gt;language-&gt;id\n        );\n        if ($id) {\n            $_GET['id_product'] = (int) $id;\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Inconvénient\u003C\u002Fstrong> : cette approche ajoute une requête SQL supplémentaire par page et peut poser des problèmes en cas de doublons de \u003Ccode>link_rewrite\u003C\u002Fcode>. À utiliser avec précaution.\u003C\u002Fp>\n\u003Ch2>Évolutions entre versions de PrestaShop\u003C\u002Fh2>\n\u003Ctr>\u003Cth>Version\u003C\u002Fth>\u003Cth>Particularités\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>1.6\u003C\u002Fth>\u003Cth>Routes dans `Dispatcher.php`, `.htaccess` seul\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>1.7\u003C\u002Fth>\u003Cth>Hook `moduleRoutes`, Symfony partiel (back office)\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>8.x\u003C\u002Fth>\u003Cth>Symfony complet en back office, `moduleRoutes` toujours valide en front, commandes console disponibles\u003C\u002Fth>\u003C\u002Ftr>",[40,43,46,49,52],{"q":41,"a":42},"Peut-on supprimer l'ID numérique des URLs simplifiées PrestaShop ?","PrestaShop utilise l'ID numérique dans ses URLs simplifiées pour identifier de manière unique chaque entité (produit, catégorie, CMS). La suppression de cet ID est possible mais nécessite un mécanisme personnalisé de résolution basé sur le rewrite slug, via un override du Dispatcher ou un module dédié. Des modules communautaires comme « Pretty URLs » proposent cette fonctionnalité clé en main.",{"q":44,"a":45},"Comment ajouter un paramètre personnalisé dans une URL simplifiée PrestaShop ?","La méthode recommandée est d'utiliser le hook moduleRoutes dans un module. Ce hook permet d'enregistrer des routes personnalisées avec des expressions régulières qui capturent vos variables. Les paramètres sont ensuite accessibles via Tools::getValue() dans le contrôleur front. Évitez de modifier directement le .htaccess car PrestaShop peut le régénérer automatiquement.",{"q":47,"a":48},"Pourquoi mes modifications de routes ne fonctionnent pas après sauvegarde ?","Après toute modification de route, il faut impérativement vider le cache PrestaShop (Paramètres avancés > Performances) et régénérer le fichier .htaccess en sauvegardant à nouveau les paramètres SEO & URLs. En PrestaShop 8.x, la commande php bin\u002Fconsole cache:clear --env=prod est également recommandée.",{"q":50,"a":51},"Quelle est la différence entre une réécriture .htaccess et une route Dispatcher ?","Une règle .htaccess agit au niveau du serveur Apache avant que PHP ne soit exécuté : elle transforme l'URL en paramètres GET. Une route Dispatcher agit au niveau applicatif PHP et offre plus de contrôle (validation, fallback, intégration aux helpers de génération de liens). La route Dispatcher est préférable car elle est pérenne et compatible avec la génération automatique des URLs via Link::getModuleLink().",{"q":53,"a":54},"Le hook moduleRoutes est-il toujours compatible avec PrestaShop 8.x ?","Oui, le hook moduleRoutes reste pleinement fonctionnel en PrestaShop 8.x pour les contrôleurs front office. Le back office utilise désormais le routeur Symfony, mais le front office conserve le Dispatcher historique et ses mécanismes de routing par module.","Les URLs simplifiées PrestaShop reposent sur le Dispatcher qui utilise des expressions régulières pour extraire les identifiants de chaque URL. Pour ajouter des variables personnalisées, privilégiez le hook moduleRoutes dans un module plutôt que des règles .htaccess, afin de garantir la pérennité et la compatibilité avec la génération de liens.",5,"2026-03-21T16:26:53.000Z",[],"PrestaShop pour les développeurs",{"columns":61},[62,78,108,129],{"title":63,"links":64},"Plateforme",[65,69,72,75],{"label":66,"href":67,"external":68},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":70,"href":71,"external":68},"Devenir Ambassadeur","\u002Fambassadeur",{"label":73,"href":74,"external":68},"Modules PrestaShop","\u002Fmodules",{"label":76,"href":77,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":79,"links":80},"Le Synedre",[81,84,87,90,93,96,99,102,105],{"label":82,"href":83,"external":68},"L'histoire","\u002Fsynedre",{"label":85,"href":86,"external":68},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":88,"href":89,"external":68},"L'équipe","\u002Fequipe",{"label":91,"href":92,"external":68},"Le réacteur en direct","\u002Freacteur",{"label":94,"href":95,"external":68},"Le Drill (entraînement)","\u002Fdrill",{"label":97,"href":98,"external":68},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":100,"href":101,"external":68},"Les agents IA","\u002Fagents-ia",{"label":103,"href":104,"external":68},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":106,"href":107,"external":68},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":109,"links":110},"Ressources",[111,114,117,120,123,126],{"label":112,"href":113,"external":68},"Blog","\u002Fblog",{"label":115,"href":116,"external":68},"Academy","\u002Facademy",{"label":118,"href":119,"external":68},"Dictionnaire","\u002Fdictionnaire",{"label":121,"href":122,"external":68},"Expertise PrestaShop","\u002Fexpertise",{"label":124,"href":125,"external":68},"Flywheel","\u002Fflywheel",{"label":127,"href":128,"external":68},"Manifeste","\u002Fmanifeste",{"title":130,"links":131},"À propos",[132,135,138],{"label":133,"href":134,"external":68},"Alexandre Carette","\u002Fa-propos",{"label":136,"href":137,"external":68},"Dossier de presse","\u002Fpresse",{"label":139,"href":140,"external":68},"Contact","\u002Fcontact",{"items":142},[143,152,158,164,172,180,185,191],{"id":144,"type":145,"label":146,"href":122,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":149,"children":150,"psChildren":151},41,"link",{"fr":147},"Expertise",null,0,[],[],{"id":153,"type":145,"label":154,"href":113,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":155,"children":156,"psChildren":157},42,{"fr":112},1,[],[],{"id":159,"type":145,"label":160,"href":74,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":161,"children":162,"psChildren":163},43,{"fr":73},2,[],[],{"id":165,"type":145,"label":166,"href":168,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":169,"children":170,"psChildren":171},44,{"fr":167},"Outils IA","\u002Foutils-ia",3,[],[],{"id":173,"type":145,"label":174,"href":67,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":176,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":177,"children":178,"psChildren":179},45,{"fr":175},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":181,"type":145,"label":182,"href":116,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":56,"children":183,"psChildren":184},46,{"fr":115},[],[],{"id":186,"type":145,"label":187,"href":134,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":188,"children":189,"psChildren":190},47,{"fr":130},6,[],[],{"id":192,"type":145,"label":193,"href":140,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":194,"children":195,"psChildren":196},48,{"fr":139},7,[],[],{"footer":198},{"theme":199,"description":148,"hours":148,"logo":200,"contact":203,"social":204,"bottomBar":214},"dark",{"src":201,"href":202,"alt":133},"\u002Flogo-ac.svg","\u002F",{"email":148,"phone":148,"address":148,"cta":148},[205,208,211],{"platform":206,"href":207,"label":206},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":209,"href":210,"label":209},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":212,"href":213,"label":212},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":148},{"academy":216,"blog":217,"expertise":228},[],[218,222,225],{"title":219,"url":220,"score":155,"type":221},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back","blog",{"title":223,"url":224,"score":155,"type":221},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",{"title":226,"url":227,"score":155,"type":221},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[],{"header":230},{"logo":231,"topBar":234,"contactEmail":237,"features":238,"navBar":148},{"src":201,"alt":232,"text":133,"href":202,"class":233},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":148,"showLanguages":68,"align":235,"languages":236},"left",[],"contact@alexandrecarette.fr",{"showSearch":68,"showWishlist":68,"showLogin":20,"showContact":68,"showCart":68,"stickyHeader":20,"headerLayout":239},"inline"]