[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"megamenu":22,"$f3AiaT16BZTaLc-RzRAJh2acinlH2MlSDUcR93aMZibY":92,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":130,"footer-db":198,"header-db":216,"$f1GtmN0nAnXnApZ2Gk1EDKmXd5ynLod4-bXtPxpiI6o4":227},{"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",{"items":23},[24,35,43,51,59,68,76,84],{"id":25,"type":26,"label":27,"href":29,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":32,"children":33,"psChildren":34},41,"link",{"fr":28},"Expertise","\u002Fexpertise",null,false,0,[],[],{"id":36,"type":26,"label":37,"href":39,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":40,"children":41,"psChildren":42},42,{"fr":38},"Blog","\u002Fblog",1,[],[],{"id":44,"type":26,"label":45,"href":47,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":48,"children":49,"psChildren":50},43,{"fr":46},"Modules PrestaShop","\u002Fmodules",2,[],[],{"id":52,"type":26,"label":53,"href":55,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":56,"children":57,"psChildren":58},44,{"fr":54},"Outils IA","\u002Foutils-ia",3,[],[],{"id":60,"type":26,"label":61,"href":63,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":64,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":65,"children":66,"psChildren":67},45,{"fr":62},"Offre Starter ✨","\u002Foffre-starter",{"highlight":20},4,[],[],{"id":69,"type":26,"label":70,"href":72,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":73,"children":74,"psChildren":75},46,{"fr":71},"Academy","\u002Facademy",5,[],[],{"id":77,"type":26,"label":78,"href":80,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":81,"children":82,"psChildren":83},47,{"fr":79},"À propos","\u002Fa-propos",6,[],[],{"id":85,"type":26,"label":86,"href":88,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":89,"children":90,"psChildren":91},48,{"fr":87},"Contact","\u002Fcontact",7,[],[],{"title":93,"slug":94,"metaDescription":95,"category":96,"tags":97,"difficulty":104,"psVersions":105,"content":109,"faq":110,"tldr":126,"readingTime":81,"generatedAt":127,"publishDate":127,"relatedArticles":128,"sourceCategory":129},"Connecter automatiquement un client après création de compte PrestaShop","connexion-automatique-apres-creation-compte-prestashop","Comment authentifier automatiquement un utilisateur après inscription sur PrestaShop 1.6, 1.7 et 8.x. Code complet, contexte cookie et bonnes pratiques sécurité.","developpement",[98,99,100,101,102,103],"authentification","cookie","context","customer","inscription","module","intermediaire",[106,107,108],"1.6","1.7","8.x","\u003Ch2>Le besoin : supprimer la friction post-inscription\u003C\u002Fh2>\n\u003Cp>Sur de nombreuses boutiques PrestaShop, le parcours d'inscription par défaut oblige le client à se connecter manuellement après avoir créé son compte. C'est un point de friction majeur qui peut entraîner des abandons, surtout lorsque vous utilisez un formulaire d'inscription personnalisé dans un module.\u003C\u002Fp>\n\u003Cp>L'objectif est simple : dès que le compte est créé via votre code PHP, le client doit être automatiquement authentifié et redirigé vers la page de votre choix, sans étape supplémentaire.\u003C\u002Fp>\n\u003Ch2>Comprendre le mécanisme d'authentification PrestaShop\u003C\u002Fh2>\n\u003Cp>PrestaShop gère l'authentification via deux mécanismes complémentaires :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**L'objet `Context`** : singleton qui contient l'état de la requête courante (client, panier, cookie, langue, etc.)\u003C\u002Fli>\n\u003Cli>**Le cookie** : stocke les informations de session côté client pour maintenir l'authentification entre les requêtes\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Pour qu'un client soit considéré comme connecté, il faut impérativement alimenter \u003Cstrong>les deux\u003C\u002Fstrong> : le contexte en mémoire (pour la requête courante) et le cookie (pour les requêtes suivantes).\u003C\u002Fp>\n\u003Cp>Le contrôleur natif \u003Ccode>AuthController\u003C\u002Fcode> utilise une méthode \u003Ccode>updateContext()\u003C\u002Fcode> qui fait exactement cela. C'est cette logique que nous allons reproduire dans notre propre code.\u003C\u002Fp>\n\u003Ch2>Implémentation complète\u003C\u002Fh2>\n\u003Ch3>PrestaShop 1.6 : approche avec cookie global\u003C\u002Fh3>\n\u003Cp>Sur PrestaShop 1.6, la gestion du cookie passe encore partiellement par la variable globale \u003Ccode>$cookie\u003C\u002Fcode>. Voici l'implémentation complète :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic static function registerAndLogin($firstname, $lastname, $email, $password)\n{\n    \u002F\u002F 1. Créer le client\n    $customer = new Customer();\n    $customer-&gt;firstname = $firstname;\n    $customer-&gt;lastname = $lastname;\n    $customer-&gt;email = $email;\n    $customer-&gt;passwd = Tools::hash($password); \u002F\u002F IMPORTANT : hasher le mot de passe\n    $customer-&gt;active = 1;\n    $customer-&gt;newsletter = 1;\n\n    if (!$customer-&gt;add()) {\n        return false;\n    }\n\n    $customer-&gt;cleanGroups();\n    $customer-&gt;addGroups([Configuration::get('PS_CUSTOMER_GROUP')]);\n\n    \u002F\u002F 2. Mettre à jour le contexte et le cookie\n    $context = Context::getContext();\n    $context-&gt;customer = $customer;\n    $context-&gt;cookie-&gt;id_customer = (int) $customer-&gt;id;\n    $context-&gt;cookie-&gt;customer_lastname = $customer-&gt;lastname;\n    $context-&gt;cookie-&gt;customer_firstname = $customer-&gt;firstname;\n    $context-&gt;cookie-&gt;passwd = $customer-&gt;passwd;\n    $context-&gt;cookie-&gt;logged = 1;\n    $context-&gt;cookie-&gt;email = $customer-&gt;email;\n    $context-&gt;cookie-&gt;write();\n\n    \u002F\u002F 3. Sécuriser le panier\n    if ($context-&gt;cart && Validate::isLoadedObject($context-&gt;cart)) {\n        $context-&gt;cart-&gt;secure_key = $customer-&gt;secure_key;\n        $context-&gt;cart-&gt;save();\n    }\n\n    $customer-&gt;logged = 1;\n\n    \u002F\u002F 4. Rediriger\n    Tools::redirect('index.php?controller=my-account');\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Point critique\u003C\u002Fstrong> : l'appel à \u003Ccode>$context->cookie->write()\u003C\u002Fcode> est indispensable. Sans lui, les données sont bien présentes en mémoire pour la requête courante, mais ne seront pas persistées dans le cookie du navigateur. Le client apparaîtrait connecté sur la page de redirection immédiate, puis serait déconnecté dès la page suivante.\u003C\u002Fp>\n\u003Ch3>PrestaShop 1.7 et 8.x : approche modernisée\u003C\u002Fh3>\n\u003Cp>À partir de PrestaShop 1.7, la variable globale \u003Ccode>$cookie\u003C\u002Fcode> est dépréciée. Tout passe par \u003Ccode>Context::getContext()->cookie\u003C\u002Fcode> avec la méthode magique \u003Ccode>__set()\u003C\u002Fcode>. De plus, PrestaShop 8.x renforce la sécurité du hachage des mots de passe.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic static function registerAndLogin($firstname, $lastname, $email, $password)\n{\n    \u002F\u002F 1. Validation des données\n    if (!Validate::isEmail($email) || !Validate::isName($firstname) || !Validate::isName($lastname)) {\n        throw new \\InvalidArgumentException('Données client invalides');\n    }\n\n    \u002F\u002F Vérifier que l'email n'existe pas déjà\n    if (Customer::customerExists($email)) {\n        throw new \\RuntimeException('Un compte existe déjà avec cet email');\n    }\n\n    \u002F\u002F 2. Créer le client\n    $customer = new Customer();\n    $customer-&gt;firstname = $firstname;\n    $customer-&gt;lastname = $lastname;\n    $customer-&gt;email = $email;\n    $customer-&gt;passwd = Tools::hash($password);\n    $customer-&gt;active = 1;\n    $customer-&gt;newsletter = 1;\n    $customer-&gt;id_default_group = (int) Configuration::get('PS_CUSTOMER_GROUP');\n\n    if (!$customer-&gt;add()) {\n        throw new \\RuntimeException('Impossible de créer le compte client');\n    }\n\n    $customer-&gt;cleanGroups();\n    $customer-&gt;addGroups([(int) Configuration::get('PS_CUSTOMER_GROUP')]);\n\n    \u002F\u002F 3. Authentifier via le contexte\n    $context = Context::getContext();\n    $context-&gt;customer = $customer;\n    $context-&gt;cookie-&gt;__set('id_customer', (int) $customer-&gt;id);\n    $context-&gt;cookie-&gt;__set('customer_lastname', $customer-&gt;lastname);\n    $context-&gt;cookie-&gt;__set('customer_firstname', $customer-&gt;firstname);\n    $context-&gt;cookie-&gt;__set('passwd', $customer-&gt;passwd);\n    $context-&gt;cookie-&gt;__set('logged', 1);\n    $context-&gt;cookie-&gt;__set('email', $customer-&gt;email);\n    $context-&gt;cookie-&gt;__set('id_lang', (int) $context-&gt;language-&gt;id);\n\n    \u002F\u002F 4. Associer le panier existant au client\n    if (Validate::isLoadedObject($context-&gt;cart)) {\n        $context-&gt;cart-&gt;id_customer = (int) $customer-&gt;id;\n        $context-&gt;cart-&gt;secure_key = $customer-&gt;secure_key;\n        $context-&gt;cart-&gt;save();\n    }\n\n    $customer-&gt;logged = 1;\n\n    \u002F\u002F 5. Hook pour notifier les autres modules\n    Hook::exec('actionAuthentication', ['customer' =&gt; $customer]);\n    Hook::exec('actionCustomerAccountAdd', ['newCustomer' =&gt; $customer]);\n\n    \u002F\u002F 6. Rediriger\n    Tools::redirect($context-&gt;link-&gt;getPageLink('my-account'));\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Les erreurs classiques à éviter\u003C\u002Fh2>\n\u003Ch3>Ne pas hasher le mot de passe\u003C\u002Fh3>\n\u003Cp>Une erreur fréquente consiste à stocker le mot de passe en clair dans l'objet \u003Ccode>Customer\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F FAUX : mot de passe en clair\n$customer-&gt;passwd = $password;\n\n\u002F\u002F CORRECT : mot de passe hashé\n$customer-&gt;passwd = Tools::hash($password);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Sans hachage, le client ne pourra jamais se reconnecter manuellement puisque la comparaison du hash échouera systématiquement.\u003C\u002Fp>\n\u003Ch3>Oublier le `secure_key` du panier\u003C\u002Fh3>\n\u003Cp>Si un panier existe déjà dans la session (le visiteur a ajouté des produits avant de s'inscrire), il faut impérativement rattacher ce panier au nouveau client via le \u003Ccode>secure_key\u003C\u002Fcode>. Sans cela, le panier sera considéré comme invalide et le client perdra ses articles.\u003C\u002Fp>\n\u003Ch3>Ne pas appeler les hooks\u003C\u002Fh3>\n\u003Cp>De nombreux modules (analytics, emailing, fidélité) écoutent les hooks \u003Ccode>actionAuthentication\u003C\u002Fcode> et \u003Ccode>actionCustomerAccountAdd\u003C\u002Fcode>. Si vous ne les déclenchez pas, ces modules ne seront pas notifiés de la création du compte et de la connexion.\u003C\u002Fp>\n\u003Ch3>Utiliser `global $cookie` sur PrestaShop 1.7+\u003C\u002Fh3>\n\u003Cp>Sur les versions récentes, l'utilisation de \u003Ccode>global $cookie\u003C\u002Fcode> provoque des erreurs fatales :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\nWarning: Creating default object from empty value\nFatal error: Call to undefined method stdClass::write()\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Utilisez exclusivement \u003Ccode>Context::getContext()->cookie\u003C\u002Fcode> avec la méthode \u003Ccode>__set()\u003C\u002Fcode> à partir de PrestaShop 1.7.\u003C\u002Fp>\n\u003Ch2>Sécurité : points de vigilance\u003C\u002Fh2>\n\u003Ch3>Validation des entrées\u003C\u002Fh3>\n\u003Cp>Avant de créer un compte, validez systématiquement les données avec les méthodes \u003Ccode>Validate\u003C\u002Fcode> de PrestaShop :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\nif (!Validate::isEmail($email)) {\n    \u002F\u002F Rejeter\n}\nif (!Validate::isPasswd($password)) {\n    \u002F\u002F Rejeter\n}\nif (!Validate::isName($firstname) || !Validate::isName($lastname)) {\n    \u002F\u002F Rejeter\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Protection CSRF\u003C\u002Fh3>\n\u003Cp>Si votre formulaire est dans un module front-office, protégez-le avec un token CSRF :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Dans le template Smarty\n&lt;input type=\"hidden\" name=\"token\" value=\"{$token}\" \u002F&gt;\n\n\u002F\u002F Dans le contrôleur\nif (!$this-&gt;isTokenValid()) {\n    $this-&gt;errors[] = $this-&gt;trans('Jeton de sécurité invalide', [], 'Shop.Notifications.Error');\n    return;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Vérification d'unicité de l'email\u003C\u002Fh3>\n\u003Cp>Toujours vérifier qu'un compte n'existe pas déjà avant d'en créer un :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\nif (Customer::customerExists($email)) {\n    \u002F\u002F Informer l'utilisateur\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Cas d'usage courants\u003C\u002Fh2>\n\u003Cp>Cette technique est particulièrement utile dans les scénarios suivants :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Formulaire d'inscription simplifié** dans un module custom (moins de champs que le formulaire natif)\u003C\u002Fli>\n\u003Cli>**Inscription via popup** ou lightbox sans rechargement de page\u003C\u002Fli>\n\u003Cli>**Import de clients** avec connexion automatique après le premier accès\u003C\u002Fli>\n\u003Cli>**Tunnel de commande personnalisé** avec création de compte intégrée à l'étape de paiement\u003C\u002Fli>\n\u003Cli>**Inscription via réseau social** (OAuth) où le compte est créé programmatiquement\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Résumé du flux complet\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Valider les données du formulaire\u003C\u002Fli>\n\u003Cli>Vérifier que l'email n'est pas déjà utilisé\u003C\u002Fli>\n\u003Cli>Créer l'objet `Customer` avec mot de passe hashé\u003C\u002Fli>\n\u003Cli>Sauvegarder en base avec `$customer->add()`\u003C\u002Fli>\n\u003Cli>Affecter les groupes clients\u003C\u002Fli>\n\u003Cli>Injecter les données dans `Context` et le cookie\u003C\u002Fli>\n\u003Cli>Rattacher le panier existant si nécessaire\u003C\u002Fli>\n\u003Cli>Déclencher les hooks PrestaShop\u003C\u002Fli>\n\u003Cli>Rediriger le client vers la page souhaitée\u003C\u002Fli>\n\u003C\u002Ful>",[111,114,117,120,123],{"q":112,"a":113},"Pourquoi le client est déconnecté après la redirection alors que le code semble correct ?","Le problème vient très probablement de l'absence d'appel à `$context->cookie->write()` (sur PrestaShop 1.6) ou d'un oubli de l'une des propriétés obligatoires du cookie. Les propriétés `id_customer`, `passwd`, `logged` et `email` doivent toutes être renseignées. Sur PrestaShop 1.7+, la persistance est automatique via `__set()`, mais vérifiez que vous utilisez bien `Context::getContext()->cookie` et non une variable `$cookie` non initialisée.",{"q":115,"a":116},"Quelle est la différence entre `global $cookie` et `Context::getContext()->cookie` ?","Sur PrestaShop 1.6, `global $cookie` référençait la même instance que `Context::getContext()->cookie`. Depuis PrestaShop 1.7, la variable globale `$cookie` n'est plus initialisée par défaut dans les modules. L'utiliser provoque une erreur 'Creating default object from empty value'. Utilisez exclusivement `Context::getContext()->cookie` qui est la méthode officielle et compatible toutes versions.",{"q":118,"a":119},"Comment connecter automatiquement un client existant sans recréer son compte ?","Récupérez d'abord le client avec `$customer = new Customer(); $customer->getByEmail($email);`, vérifiez le mot de passe avec `$customer->isGuest()` ou `password_verify()`, puis appliquez la même logique d'injection dans le contexte et le cookie. Ne jamais connecter un client sans vérification préalable du mot de passe, sauf dans un flux OAuth contrôlé côté serveur.",{"q":121,"a":122},"Le panier du visiteur disparaît après l'inscription, comment le conserver ?","Après la création du compte et l'authentification, vous devez rattacher le panier existant au nouveau client en assignant `$context->cart->id_customer = (int) $customer->id` et `$context->cart->secure_key = $customer->secure_key`, puis appeler `$context->cart->save()`. Sans cette étape, PrestaShop considère que le panier anonyme n'appartient pas au client et le réinitialise.",{"q":124,"a":125},"Cette méthode fonctionne-t-elle avec PrestaShop 8.x ?","Oui, la méthode via `Context::getContext()->cookie->__set()` est pleinement compatible avec PrestaShop 8.x. La seule différence notable concerne le hachage du mot de passe : PrestaShop 8 utilise `password_hash()` avec bcrypt par défaut via `Tools::hash()`. Assurez-vous de toujours utiliser `Tools::hash()` plutôt qu'un `md5()` manuel, qui est obsolète et non sécurisé.","Pour connecter automatiquement un client après création de compte sur PrestaShop, il faut injecter ses données dans le Context et le cookie via `Context::getContext()->cookie->__set()`, rattacher le panier existant avec le `secure_key`, puis déclencher les hooks d'authentification avant de rediriger.","2026-03-21T13:20:28.000Z",[],"PrestaShop pour les développeurs",{"columns":131},[132,144,174,190],{"title":133,"links":134},"Plateforme",[135,137,140,141],{"label":136,"href":63,"external":31},"Offre Starter (2 500 €)",{"label":138,"href":139,"external":31},"Devenir Ambassadeur","\u002Fambassadeur",{"label":46,"href":47,"external":31},{"label":142,"href":143,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":145,"links":146},"Le Synedre",[147,150,153,156,159,162,165,168,171],{"label":148,"href":149,"external":31},"L'histoire","\u002Fsynedre",{"label":151,"href":152,"external":31},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":154,"href":155,"external":31},"L'équipe","\u002Fequipe",{"label":157,"href":158,"external":31},"Le réacteur en direct","\u002Freacteur",{"label":160,"href":161,"external":31},"Le Drill (entraînement)","\u002Fdrill",{"label":163,"href":164,"external":31},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":166,"href":167,"external":31},"Les agents IA","\u002Fagents-ia",{"label":169,"href":170,"external":31},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":172,"href":173,"external":31},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":175,"links":176},"Ressources",[177,178,179,182,184,187],{"label":38,"href":39,"external":31},{"label":71,"href":72,"external":31},{"label":180,"href":181,"external":31},"Dictionnaire","\u002Fdictionnaire",{"label":183,"href":29,"external":31},"Expertise PrestaShop",{"label":185,"href":186,"external":31},"Flywheel","\u002Fflywheel",{"label":188,"href":189,"external":31},"Manifeste","\u002Fmanifeste",{"title":79,"links":191},[192,194,197],{"label":193,"href":80,"external":31},"Alexandre Carette",{"label":195,"href":196,"external":31},"Dossier de presse","\u002Fpresse",{"label":87,"href":88,"external":31},{"footer":199},{"theme":200,"description":30,"hours":30,"logo":201,"contact":204,"social":205,"bottomBar":215},"dark",{"src":202,"href":203,"alt":193},"\u002Flogo-ac.svg","\u002F",{"email":30,"phone":30,"address":30,"cta":30},[206,209,212],{"platform":207,"href":208,"label":207},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":210,"href":211,"label":210},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":213,"href":214,"label":213},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":30},{"header":217},{"logo":218,"topBar":221,"contactEmail":224,"features":225,"navBar":30},{"src":202,"alt":219,"text":193,"href":203,"class":220},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":30,"showLanguages":31,"align":222,"languages":223},"left",[],"contact@alexandrecarette.fr",{"showSearch":31,"showWishlist":31,"showLogin":20,"showContact":31,"showCart":31,"stickyHeader":20,"headerLayout":226},"inline",{"academy":228,"blog":229,"expertise":240},[],[230,234,237],{"title":231,"url":232,"score":40,"type":233},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back","blog",{"title":235,"url":236,"score":40,"type":233},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",{"title":238,"url":239,"score":40,"type":233},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[]]