[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$fgnMTlax-X2JAeEecNoNgmV2vIM90tN63x-8gaF9jLkA":22,"$fZhHbIDj1TCoiXfBNpKLF1X2SVkfXDsTXWg7eJgWlRFk":62,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":77,"megamenu":158,"header-db":213,"footer-db":226},{"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":35,"psVersions":36,"content":40,"faq":41,"tldr":57,"readingTime":58,"generatedAt":59,"publishDate":59,"relatedArticles":60,"sourceCategory":61},"Déplacer le menu horizontal PrestaShop vers un autre hook","deplacer-menu-horizontal-prestashop-hook-displaynav","Guide complet pour repositionner le menu horizontal PrestaShop (blocktopmenu) du hook displayTop vers displayNav. Code, pièges CSS et migration PS 8.","developpement",[28,29,30,31,32,33,34],"hooks","blocktopmenu","displayNav","displayTop","menu","theme","module","intermediaire",[37,38,39],"1.6","1.7","8.x","\u003Ch2>Pourquoi repositionner le menu horizontal dans PrestaShop\u003C\u002Fh2>\n\u003Cp>Le module \u003Cstrong>blocktopmenu\u003C\u002Fstrong> (renommé \u003Ccode>ps_mainmenu\u003C\u002Fcode> depuis PrestaShop 1.7) s'accroche par défaut au hook \u003Ccode>displayTop\u003C\u002Fcode>. Ce positionnement convient à la majorité des thèmes, mais certains designs exigent que le menu apparaisse dans la barre de navigation supérieure — le hook \u003Ccode>displayNav\u003C\u002Fcode> — pour obtenir un header plus compact ou un agencement visuel différent.\u003C\u002Fp>\n\u003Cp>Déplacer un module d'un hook à un autre est une opération courante en développement PrestaShop, mais elle réserve plusieurs pièges si on ne maîtrise pas le mécanisme des hooks et le système de surcharge des thèmes.\u003C\u002Fp>\n\u003Ch2>Comprendre les hooks d'affichage du header\u003C\u002Fh2>\n\u003Cp>Avant de toucher au code, il faut comprendre la hiérarchie des hooks dans le header PrestaShop :\u003C\u002Fp>\n\u003Ctr>\u003Cth>Hook\u003C\u002Fth>\u003Cth>Emplacement\u003C\u002Fth>\u003Cth>Usage typique\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`displayNav` \u002F `displayNav1`\u003C\u002Fth>\u003Cth>Tout en haut de la page\u003C\u002Fth>\u003Cth>Liens compte, panier, devise, langue\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`displayTop`\u003C\u002Fth>\u003Cth>Sous la barre de navigation\u003C\u002Fth>\u003Cth>Menu principal, barre de recherche\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`displayHeader` \u002F `header`\u003C\u002Fth>\u003Cth>Balise `\u003Chead>`\u003C\u002Fth>\u003Cth>Chargement CSS\u002FJS\u003C\u002Fth>\u003C\u002Ftr>\n\u003Cblockquote>\u003Cp>\u003Cstrong>PrestaShop 1.7+ \u002F 8.x :\u003C\u002Fstrong> Les hooks ont été renommés et scindés. \u003Ccode>displayNav\u003C\u002Fcode> devient \u003Ccode>displayNav1\u003C\u002Fcode> et \u003Ccode>displayNav2\u003C\u002Fcode>. Le module \u003Ccode>ps_mainmenu\u003C\u002Fcode> s'accroche à \u003Ccode>displayTop\u003C\u002Fcode> par défaut. Le principe de migration reste identique.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Méthode 1 : Greffer le module via le back-office\u003C\u002Fh2>\n\u003Cp>La méthode la plus simple ne nécessite aucune modification de code :\u003C\u002Fp>\n\u003Col>\n\u003Cli>Rendez-vous dans **Apparence → Positions des modules**\u003C\u002Fli>\n\u003Cli>Recherchez le module `blocktopmenu` (ou `Menu principal` en PS 8.x)\u003C\u002Fli>\n\u003Cli>Décrochez-le du hook `displayTop` (icône de suppression)\u003C\u002Fli>\n\u003Cli>Cliquez sur **Greffer un module**, sélectionnez le module et choisissez le hook `displayNav`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Limite :\u003C\u002Fstrong> cette méthode ne greffe pas automatiquement les assets CSS et JS du module. Si le menu s'affiche sans mise en forme, il faudra passer à la méthode 2.\u003C\u002Fp>\n\u003Ch2>Méthode 2 : Modifier le module pour enregistrer le bon hook\u003C\u002Fh2>\n\u003Cp>Cette méthode est plus robuste car elle garantit le chargement des assets et persiste après une réinstallation du module.\u003C\u002Fp>\n\u003Ch3>Étape 1 — Modifier la méthode `install()`\u003C\u002Fh3>\n\u003Cp>Dans le fichier \u003Ccode>blocktopmenu.php\u003C\u002Fcode> (PS 1.6) ou \u003Ccode>ps_mainmenu.php\u003C\u002Fcode> (PS 1.7+), localisez la méthode \u003Ccode>install()\u003C\u002Fcode> et remplacez le hook d'affichage :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic function install($delete_params = true)\n{\n    if (!parent::install() ||\n        \u002F\u002F On remplace displayTop par displayNav\n        \u002F\u002F !$this-&gt;registerHook('displayTop') ||\n        !$this-&gt;registerHook('header') ||\n        !$this-&gt;registerHook('displayNav') ||\n        !$this-&gt;registerHook('actionObjectCategoryUpdateAfter') ||\n        !$this-&gt;registerHook('actionObjectCategoryDeleteAfter') ||\n        !$this-&gt;registerHook('actionObjectCategoryAddAfter') ||\n        !$this-&gt;registerHook('actionObjectCmsUpdateAfter') ||\n        !$this-&gt;registerHook('actionObjectCmsDeleteAfter') ||\n        !$this-&gt;registerHook('actionObjectCmsAddAfter') ||\n        !$this-&gt;registerHook('actionObjectSupplierUpdateAfter') ||\n        !$this-&gt;registerHook('actionObjectSupplierDeleteAfter') ||\n        !$this-&gt;registerHook('actionObjectSupplierAddAfter') ||\n        !$this-&gt;registerHook('actionObjectManufacturerUpdateAfter') ||\n        !$this-&gt;registerHook('actionObjectManufacturerDeleteAfter') ||\n        !$this-&gt;registerHook('actionObjectManufacturerAddAfter')\n    ) {\n        return false;\n    }\n    return true;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Points essentiels :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Le hook `header` est **indispensable** : c'est lui qui injecte les fichiers CSS et JS dans le `\u003Chead>`. Sans lui, le menu s'affichera sans aucun style.\u003C\u002Fli>\n\u003Cli>On commente `displayTop` et on ajoute `displayNav` à la place.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Étape 2 — Ajouter la méthode `hookDisplayNav()`\u003C\u002Fh3>\n\u003Cp>Le module possède une méthode \u003Ccode>hookDisplayTop()\u003C\u002Fcode> qui génère le HTML du menu. Il faut créer son équivalent pour le hook \u003Ccode>displayNav\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic function hookDisplayNav($params)\n{\n    return $this-&gt;hookDisplayTop($params);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cette approche par délégation est la plus propre : tout le code de rendu reste centralisé dans \u003Ccode>hookDisplayTop()\u003C\u002Fcode>, et \u003Ccode>hookDisplayNav()\u003C\u002Fcode> se contente de le relayer.\u003C\u002Fp>\n\u003Ch3>Étape 3 — Réinstaller le module\u003C\u002Fh3>\n\u003Cp>Après modification du fichier PHP, il faut désinstaller puis réinstaller le module pour que les nouveaux hooks soient enregistrés en base de données :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Back-office → Modules → blocktopmenu → Désinstaller** (sans supprimer les données si l'option est proposée)\u003C\u002Fli>\n\u003Cli>**Réinstaller** le module\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Astuce :\u003C\u002Fstrong> En PrestaShop 8.x, vous pouvez aussi forcer l'enregistrement d'un hook sans réinstaller via la console Symfony :\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cblockquote>\u003Cp>```bash\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cblockquote>\u003Cp>php bin\u002Fconsole prestashop:module reset ps_mainmenu\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cblockquote>\u003Cp>```\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Le piège classique : le CSS qui disparaît\u003C\u002Fh2>\n\u003Cp>C'est le problème le plus fréquent lors d'un changement de hook. Le menu s'affiche en HTML brut, sans aucune mise en forme. Deux causes possibles :\u003C\u002Fp>\n\u003Ch3>Cause 1 : Le hook `header` n'est pas enregistré\u003C\u002Fh3>\n\u003Cp>Le chargement des CSS et JS se fait dans la méthode \u003Ccode>hookDisplayTop()\u003C\u002Fcode> via ces appels :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n$this-&gt;context-&gt;controller-&gt;addCSS($this-&gt;_path.'css\u002Fblocktopmenu.css');\n$this-&gt;context-&gt;controller-&gt;addCSS($this-&gt;_path.'css\u002Fsuperfish-modified.css');\n$this-&gt;context-&gt;controller-&gt;addJS($this-&gt;_path.'js\u002FhoverIntent.js');\n$this-&gt;context-&gt;controller-&gt;addJS($this-&gt;_path.'js\u002Fsuperfish-modified.js');\n$this-&gt;context-&gt;controller-&gt;addJS($this-&gt;_path.'js\u002Fblocktopmenu.js');\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Si ces appels ne sont plus exécutés (parce que \u003Ccode>hookDisplayTop\u003C\u002Fcode> n'est plus appelé), les assets ne sont pas chargés. La solution : s'assurer que la méthode \u003Ccode>hookDisplayNav()\u003C\u002Fcode> délègue bien à \u003Ccode>hookDisplayTop()\u003C\u002Fcode> comme montré plus haut.\u003C\u002Fp>\n\u003Ch3>Cause 2 : Les surcharges du thème\u003C\u002Fh3>\n\u003Cp>La plupart des thèmes incluent leurs propres fichiers CSS pour le module menu dans :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\nthemes\u002Fvotre-theme\u002Fmodules\u002Fblocktopmenu\u002Fcss\u002F\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ces surcharges sont parfois liées au hook d'origine. Pour diagnostiquer :\u003C\u002Fp>\n\u003Col>\n\u003Cli>Renommez le dossier `themes\u002Fvotre-theme\u002Fmodules\u002Fblocktopmenu\u002F` en `blocktopmenu-save\u002F`\u003C\u002Fli>\n\u003Cli>Videz le cache PrestaShop\u003C\u002Fli>\n\u003Cli>Rechargez la page\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Si le menu s'affiche correctement (avec les styles par défaut du module), le problème vient bien de la surcharge thème. Il faudra alors adapter les fichiers CSS du thème pour cibler le conteneur du hook \u003Ccode>displayNav\u003C\u002Fcode> au lieu de \u003Ccode>displayTop\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2>Adaptation pour PrestaShop 8.x\u003C\u002Fh2>\n\u003Cp>En PrestaShop 8.x avec le module \u003Ccode>ps_mainmenu\u003C\u002Fcode>, l'architecture a évolué mais le principe reste le même :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F ps_mainmenu.php — PrestaShop 8.x\npublic function install()\n{\n    return parent::install()\n        && $this-&gt;registerHook('displayNav1')  \u002F\u002F au lieu de displayTop\n        && $this-&gt;registerHook('displayHeader')\n        && $this-&gt;registerHook('actionObjectCategoryUpdateAfter')\n        && $this-&gt;registerHook('actionObjectCategoryDeleteAfter')\n        && $this-&gt;registerHook('actionObjectCategoryAddAfter')\n        && $this-&gt;registerHook('actionObjectCmsUpdateAfter')\n        && $this-&gt;registerHook('actionObjectCmsDeleteAfter')\n        && $this-&gt;registerHook('actionObjectCmsAddAfter');\n}\n\npublic function hookDisplayNav1($params)\n{\n    return $this-&gt;renderWidget(null, $params);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Note :\u003C\u002Fstrong> En PS 8.x, le pattern \u003Ccode>renderWidget()\u003C\u002Fcode> remplace les anciens \u003Ccode>hookDisplay*()\u003C\u002Fcode> directs. Le module implémente l'interface \u003Ccode>WidgetInterface\u003C\u002Fcode> et centralise le rendu dans \u003Ccode>renderWidget()\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Vérifications post-modification\u003C\u002Fh2>\n\u003Cp>Après avoir déplacé le menu, vérifiez systématiquement :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>[ ] Le menu s'affiche au bon emplacement\u003C\u002Fli>\n\u003Cli>[ ] Les sous-menus en survol (dropdown) fonctionnent\u003C\u002Fli>\n\u003Cli>[ ] Les fichiers CSS sont bien chargés (inspecteur navigateur → onglet Réseau)\u003C\u002Fli>\n\u003Cli>[ ] Les fichiers JS sont chargés (effets hover, animations Superfish)\u003C\u002Fli>\n\u003Cli>[ ] Le menu responsive fonctionne sur mobile\u003C\u002Fli>\n\u003Cli>[ ] Le cache PrestaShop est vidé (`Paramètres avancés → Performances`)\u003C\u002Fli>\n\u003Cli>[ ] La page est testée en navigation privée (pas de cache navigateur)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Méthode alternative : transplantation SQL directe\u003C\u002Fh2>\n\u003Cp>Pour les développeurs à l'aise avec la base de données, il est possible de changer le hook sans modifier le code PHP ni réinstaller le module :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">\nUPDATE ps_hook_module hm\nJOIN ps_hook h_old ON hm.id_hook = h_old.id_hook AND h_old.name = 'displayTop'\nJOIN ps_hook h_new ON h_new.name = 'displayNav'\nJOIN ps_module m ON hm.id_module = m.id_module AND m.name = 'blocktopmenu'\nSET hm.id_hook = h_new.id_hook;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Attention :\u003C\u002Fstrong> Cette méthode ne modifie que la greffe. Si le module n'a pas de méthode \u003Ccode>hookDisplayNav()\u003C\u002Fcode>, il faudra quand même l'ajouter dans le code PHP. Pensez aussi à vider le cache après la modification SQL.\u003C\u002Fp>\u003C\u002Fblockquote>",[42,45,48,51,54],{"q":43,"a":44},"Pourquoi mon menu PrestaShop s'affiche sans CSS après un changement de hook ?","Le problème vient généralement du hook `header` qui n'est pas enregistré, empêchant le chargement des fichiers CSS et JS. Vérifiez que votre module enregistre bien le hook `header` (PS 1.6) ou `displayHeader` (PS 8.x) dans sa méthode install(). Vérifiez aussi que la méthode du nouveau hook (ex: hookDisplayNav) délègue correctement à la méthode de rendu qui contient les appels addCSS\u002FaddJS. Enfin, les surcharges CSS du thème peuvent aussi interférer.",{"q":46,"a":47},"Quelle est la différence entre displayNav, displayNav1 et displayNav2 en PrestaShop 8 ?","En PrestaShop 1.6, il n'existe qu'un seul hook `displayNav`. À partir de PrestaShop 1.7 et en 8.x, ce hook a été scindé en deux : `displayNav1` (première ligne de navigation, typiquement contacts et liens utilitaires) et `displayNav2` (seconde ligne, souvent le panier et le compte client). Choisissez le hook en fonction de l'emplacement visuel souhaité dans votre thème.",{"q":49,"a":50},"Faut-il réinstaller le module après avoir modifié les hooks dans le code PHP ?","Oui, si vous modifiez la méthode install() pour enregistrer de nouveaux hooks, vous devez désinstaller puis réinstaller le module pour que les changements prennent effet en base de données. Alternativement, en PrestaShop 8.x, vous pouvez utiliser la commande `php bin\u002Fconsole prestashop:module reset nom_module`. Vous pouvez aussi greffer manuellement le module via le back-office dans Apparence → Positions, sans toucher au code.",{"q":52,"a":53},"Comment déplacer le menu principal sans modifier le code du module ?","Rendez-vous dans Apparence → Positions des modules dans le back-office PrestaShop. Décrochez le module menu de son hook actuel (displayTop), puis utilisez le bouton « Greffer un module » pour le rattacher au hook souhaité (displayNav, displayNav1, etc.). Si les styles ne s'appliquent pas, il faudra adapter le CSS manuellement ou enregistrer le hook header dans le module.",{"q":55,"a":56},"Peut-on afficher le même menu sur deux hooks différents en PrestaShop ?","Techniquement oui : il suffit de greffer le module sur les deux hooks (displayTop ET displayNav) via le back-office ou en enregistrant les deux hooks dans la méthode install(). Le menu apparaîtra alors deux fois sur la page. En pratique, c'est rarement souhaitable. Si vous avez besoin de deux menus distincts, il est préférable de dupliquer le module avec un nom différent et de configurer chaque instance indépendamment.","Pour déplacer le menu horizontal PrestaShop, remplacez le hook `displayTop` par `displayNav` dans la méthode install() du module, ajoutez une méthode `hookDisplayNav()` qui délègue au rendu existant, et réinstallez le module. Assurez-vous que le hook `header` est bien enregistré pour le chargement des CSS\u002FJS.",6,"2026-03-21T13:02:18.000Z",[],"PrestaShop pour les développeurs",{"academy":63,"blog":64,"expertise":76},[],[65,70,73],{"title":66,"url":67,"score":68,"type":69},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back",1,"blog",{"title":71,"url":72,"score":68,"type":69},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",{"title":74,"url":75,"score":68,"type":69},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[],{"columns":78},[79,95,125,146],{"title":80,"links":81},"Plateforme",[82,86,89,92],{"label":83,"href":84,"external":85},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":87,"href":88,"external":85},"Devenir Ambassadeur","\u002Fambassadeur",{"label":90,"href":91,"external":85},"Modules PrestaShop","\u002Fmodules",{"label":93,"href":94,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":96,"links":97},"Le Synedre",[98,101,104,107,110,113,116,119,122],{"label":99,"href":100,"external":85},"L'histoire","\u002Fsynedre",{"label":102,"href":103,"external":85},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":105,"href":106,"external":85},"L'équipe","\u002Fequipe",{"label":108,"href":109,"external":85},"Le réacteur en direct","\u002Freacteur",{"label":111,"href":112,"external":85},"Le Drill (entraînement)","\u002Fdrill",{"label":114,"href":115,"external":85},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":117,"href":118,"external":85},"Les agents IA","\u002Fagents-ia",{"label":120,"href":121,"external":85},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":123,"href":124,"external":85},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":126,"links":127},"Ressources",[128,131,134,137,140,143],{"label":129,"href":130,"external":85},"Blog","\u002Fblog",{"label":132,"href":133,"external":85},"Academy","\u002Facademy",{"label":135,"href":136,"external":85},"Dictionnaire","\u002Fdictionnaire",{"label":138,"href":139,"external":85},"Expertise PrestaShop","\u002Fexpertise",{"label":141,"href":142,"external":85},"Flywheel","\u002Fflywheel",{"label":144,"href":145,"external":85},"Manifeste","\u002Fmanifeste",{"title":147,"links":148},"À propos",[149,152,155],{"label":150,"href":151,"external":85},"Alexandre Carette","\u002Fa-propos",{"label":153,"href":154,"external":85},"Dossier de presse","\u002Fpresse",{"label":156,"href":157,"external":85},"Contact","\u002Fcontact",{"items":159},[160,169,174,180,188,196,202,207],{"id":161,"type":162,"label":163,"href":139,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":165,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":166,"children":167,"psChildren":168},41,"link",{"fr":164},"Expertise",null,0,[],[],{"id":170,"type":162,"label":171,"href":130,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":165,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":68,"children":172,"psChildren":173},42,{"fr":129},[],[],{"id":175,"type":162,"label":176,"href":91,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":165,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":177,"children":178,"psChildren":179},43,{"fr":90},2,[],[],{"id":181,"type":162,"label":182,"href":184,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":165,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":185,"children":186,"psChildren":187},44,{"fr":183},"Outils IA","\u002Foutils-ia",3,[],[],{"id":189,"type":162,"label":190,"href":84,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":192,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":193,"children":194,"psChildren":195},45,{"fr":191},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":197,"type":162,"label":198,"href":133,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":165,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":199,"children":200,"psChildren":201},46,{"fr":132},5,[],[],{"id":203,"type":162,"label":204,"href":151,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":165,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":58,"children":205,"psChildren":206},47,{"fr":147},[],[],{"id":208,"type":162,"label":209,"href":157,"icon":165,"description":165,"badge":165,"groupTitle":165,"style":165,"gridColumns":165,"cssClass":165,"psCategoryId":165,"showPsChildren":85,"position":210,"children":211,"psChildren":212},48,{"fr":156},7,[],[],{"header":214},{"logo":215,"topBar":220,"contactEmail":223,"features":224,"navBar":165},{"src":216,"alt":217,"text":150,"href":218,"class":219},"\u002Flogo-ac.svg","Alexandre Carette — Architecte E-commerce Souverain","\u002F","h-10 w-10",{"message":165,"showLanguages":85,"align":221,"languages":222},"left",[],"contact@alexandrecarette.fr",{"showSearch":85,"showWishlist":85,"showLogin":20,"showContact":85,"showCart":85,"stickyHeader":20,"headerLayout":225},"inline",{"footer":227},{"theme":228,"description":165,"hours":165,"logo":229,"contact":230,"social":231,"bottomBar":241},"dark",{"src":216,"href":218,"alt":150},{"email":165,"phone":165,"address":165,"cta":165},[232,235,238],{"platform":233,"href":234,"label":233},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":236,"href":237,"label":236},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":239,"href":240,"label":239},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":165}]