[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$ftF3FqUyNZcJiVCoXUPZEk4WUB0-ltqsHffXa2m0L49g":22,"megamenu":61,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":130,"footer-db":198,"header-db":216,"$fLoGgxVQs1iHePECHdTHATnlCRMyyUIKpn_9wbxgytIM":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",{"title":23,"slug":24,"metaDescription":25,"category":26,"tags":27,"difficulty":35,"psVersions":36,"content":39,"faq":40,"tldr":56,"readingTime":57,"generatedAt":58,"publishDate":58,"relatedArticles":59,"sourceCategory":60},"Ajouter des boutons de choix transporteur pour le retour produit PrestaShop","boutons-choix-transporteur-retour-produit-prestashop","Personnalisez le formulaire de retour produit PrestaShop avec des boutons de choix transporteur (Colissimo, Mondial Relay) et notification email automatique.","livraison",[28,29,30,31,32,33,34],"retour produit","merchandise return","Mail::Send","Colissimo","Mondial Relay","postProcess","transporteur","intermediaire",[37,38],"1.7","8.x","\u003Ch2>Introduction\u003C\u002Fh2>\n\u003Cp>Le processus de retour produit natif de PrestaShop est fonctionnel mais minimaliste. Par défaut, le client remplit un formulaire de demande de retour sans pouvoir choisir le mode d'expédition pour renvoyer son article. Dans le cadre d'une boutique proposant plusieurs transporteurs retour — typiquement \u003Cstrong>Colissimo\u003C\u002Fstrong> et \u003Cstrong>Mondial Relay\u003C\u002Fstrong> — il est pertinent de laisser le client sélectionner son option préférée dès la demande de retour, puis d'envoyer un email récapitulatif au marchand.\u003C\u002Fp>\n\u003Cp>Cet article détaille comment modifier le formulaire de retour marchandise pour y intégrer des boutons de sélection transporteur, traiter le choix côté back-end via \u003Ccode>postProcess()\u003C\u002Fcode>, et déclencher une notification email personnalisée avec \u003Ccode>Mail::Send()\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2>Comprendre le mécanisme de retour natif\u003C\u002Fh2>\n\u003Cp>Le retour produit dans PrestaShop est géré par le controller \u003Ccode>OrderReturnController\u003C\u002Fcode> (front-office). Lorsqu'un client soumet sa demande, la méthode \u003Ccode>postProcess()\u003C\u002Fcode> intercepte le formulaire via \u003Ccode>Tools::isSubmit()\u003C\u002Fcode> et crée une entrée dans la table \u003Ccode>ps_order_return\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Le flux standard est le suivant :\u003C\u002Fp>\n\u003Col>\n\u003Cli>Le client accède à l'historique de commande\u003C\u002Fli>\n\u003Cli>Il sélectionne les produits à retourner\u003C\u002Fli>\n\u003Cli>Il soumet le formulaire `submitReturnMerchandise`\u003C\u002Fli>\n\u003Cli>PrestaShop enregistre le retour et envoie un email basique\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Notre objectif : \u003Cstrong>injecter une étape de choix transporteur\u003C\u002Fstrong> entre les points 2 et 3, puis \u003Cstrong>enrichir l'email de notification\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch2>Étape 1 : Modifier le template front-office\u003C\u002Fh2>\n\u003Cp>Dans le thème actif, localisez le template de retour. En PrestaShop 8.x, il s'agit du fichier :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\nthemes\u002Fvotre-theme\u002Ftemplates\u002Fcustomer\u002Forder-return.tpl\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>En PrestaShop 1.7.x :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\nthemes\u002Fvotre-theme\u002Ftemplates\u002Fcustomer\u002Forder-follow.tpl\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ajoutez les boutons radio de sélection transporteur dans le formulaire, \u003Cstrong>avant le bouton de soumission\u003C\u002Fstrong> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-html\">\n&lt;div class=\"form-group return-shipping-choice\"&gt;\n  &lt;label class=\"form-control-label\"&gt;{l s='Choisissez votre mode de retour' d='Shop.Theme.CustomerAccount'}&lt;\u002Flabel&gt;\n  \n  &lt;div class=\"custom-control custom-radio\"&gt;\n    &lt;input type=\"radio\" \n           id=\"return-colissimo\" \n           name=\"return_carrier\" \n           value=\"colissimo\" \n           class=\"custom-control-input\" \n           required&gt;\n    &lt;label class=\"custom-control-label\" for=\"return-colissimo\"&gt;\n      &lt;img src=\"{$urls.img_url}carriers\u002Fcolissimo-icon.png\" alt=\"Colissimo\" width=\"24\" height=\"24\"&gt;\n      Colissimo - Retour en bureau de poste\n    &lt;\u002Flabel&gt;\n  &lt;\u002Fdiv&gt;\n  \n  &lt;div class=\"custom-control custom-radio\"&gt;\n    &lt;input type=\"radio\" \n           id=\"return-mondial-relay\" \n           name=\"return_carrier\" \n           value=\"mondial_relay\" \n           class=\"custom-control-input\"&gt;\n    &lt;label class=\"custom-control-label\" for=\"return-mondial-relay\"&gt;\n      &lt;img src=\"{$urls.img_url}carriers\u002Fmondial-relay-icon.png\" alt=\"Mondial Relay\" width=\"24\" height=\"24\"&gt;\n      Mondial Relay - Retour en point relais\n    &lt;\u002Flabel&gt;\n  &lt;\u002Fdiv&gt;\n&lt;\u002Fdiv&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Bonne pratique PrestaShop 8.x :\u003C\u002Fstrong> Utilisez le domaine de traduction \u003Ccode>Shop.Theme.CustomerAccount\u003C\u002Fcode> pour que vos chaînes soient traduisibles depuis le back-office.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Étape 2 : Traiter le choix dans postProcess()\u003C\u002Fh2>\n\u003Cp>La logique métier se place dans un \u003Cstrong>override\u003C\u002Fstrong> du controller \u003Ccode>OrderReturnController\u003C\u002Fcode>. Créez ou éditez le fichier :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\noverride\u002Fcontrollers\u002Ffront\u002FOrderReturnController.php\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode class=\"language-php\">\n&lt;?php\n\u002F**\n * @author Alexandre Carette &lt;contact@alexandrecarette.fr&gt;\n * @copyright 2026 Alexandre Carette\n * @license Propriétaire et Confidentiel\n *\u002F\n\nclass OrderReturnController extends OrderReturnControllerCore\n{\n    public function postProcess()\n    {\n        if (Tools::isSubmit('submitReturnMerchandise')) {\n            \u002F\u002F Récupérer le choix transporteur\n            $returnCarrier = Tools::getValue('return_carrier');\n            \n            \u002F\u002F Valider la valeur reçue\n            $allowedCarriers = ['colissimo', 'mondial_relay'];\n            if (!in_array($returnCarrier, $allowedCarriers, true)) {\n                $this-&gt;errors[] = $this-&gt;trans(\n                    'Veuillez sélectionner un mode de retour.',\n                    [],\n                    'Shop.Notifications.Error'\n                );\n                return;\n            }\n            \n            \u002F\u002F Préparer le libellé lisible pour l'email\n            $carrierLabels = [\n                'colissimo' =&gt; 'Colissimo (Bureau de poste)',\n                'mondial_relay' =&gt; 'Mondial Relay (Point relais)',\n            ];\n            $carrierLabel = $carrierLabels[$returnCarrier];\n            \n            \u002F\u002F Variables pour le template email\n            $templateVars = [\n                '{carrier_choice}' =&gt; $carrierLabel,\n                '{firstname}' =&gt; $this-&gt;context-&gt;customer-&gt;firstname,\n                '{lastname}' =&gt; $this-&gt;context-&gt;customer-&gt;lastname,\n                '{email}' =&gt; $this-&gt;context-&gt;customer-&gt;email,\n                '{order_reference}' =&gt; Tools::getValue('id_order'),\n            ];\n            \n            \u002F\u002F Envoyer l'email de notification au marchand\n            Mail::Send(\n                (int) $this-&gt;context-&gt;language-&gt;id,\n                'return_carrier_notification',\n                $this-&gt;trans('Nouveau retour produit - %carrier%', ['%carrier%' =&gt; $carrierLabel], 'Emails.Subject'),\n                $templateVars,\n                Configuration::get('PS_SHOP_EMAIL'),\n                Configuration::get('PS_SHOP_NAME'),\n                null,\n                null,\n                null,\n                null,\n                _PS_MAIL_DIR_,\n                false,\n                (int) $this-&gt;context-&gt;shop-&gt;id\n            );\n        }\n        \n        \u002F\u002F Appeler le traitement parent pour créer le retour\n        parent::postProcess();\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Points techniques importants\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>**`Tools::getValue()`** récupère une valeur POST\u002FGET de manière sécurisée (avec échappement). C'est la méthode standard PrestaShop — ne jamais utiliser `$_POST` directement.\u003C\u002Fli>\n\u003Cli>**Validation stricte** : Toujours vérifier que la valeur reçue fait partie des choix autorisés. Un champ radio peut être manipulé côté client.\u003C\u002Fli>\n\u003Cli>**`parent::postProcess()`** : Essentiel pour ne pas casser le flux natif de création du retour produit.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Étape 3 : Créer le template email\u003C\u002Fh2>\n\u003Cp>PrestaShop utilise des templates HTML et TXT pour les emails. Créez deux fichiers dans le dossier \u003Ccode>mails\u002Ffr\u002F\u003C\u002Fcode> de votre thème :\u003C\u002Fp>\n\u003Ch3>Template HTML : `return_carrier_notification.html`\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-html\">\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;body&gt;\n  &lt;table width=\"100%\"&gt;\n    &lt;tr&gt;\n      &lt;td&gt;\n        &lt;h2&gt;Nouvelle demande de retour produit&lt;\u002Fh2&gt;\n        &lt;p&gt;&lt;strong&gt;Client :&lt;\u002Fstrong&gt; {firstname} {lastname} ({email})&lt;\u002Fp&gt;\n        &lt;p&gt;&lt;strong&gt;Commande :&lt;\u002Fstrong&gt; #{order_reference}&lt;\u002Fp&gt;\n        &lt;p&gt;&lt;strong&gt;Mode de retour choisi :&lt;\u002Fstrong&gt; {carrier_choice}&lt;\u002Fp&gt;\n      &lt;\u002Ftd&gt;\n    &lt;\u002Ftr&gt;\n  &lt;\u002Ftable&gt;\n&lt;\u002Fbody&gt;\n&lt;\u002Fhtml&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Template TXT : `return_carrier_notification.txt`\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-\">\nNouvelle demande de retour produit\n\nClient : {firstname} {lastname} ({email})\nCommande : #{order_reference}\nMode de retour choisi : {carrier_choice}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Attention :\u003C\u002Fstrong> Les deux fichiers (HTML et TXT) sont obligatoires. Si le fichier TXT est absent, \u003Ccode>Mail::Send()\u003C\u002Fcode> lèvera une exception silencieuse et l'email ne partira pas.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Étape 4 : Vider le cache des overrides\u003C\u002Fh2>\n\u003Cp>Après avoir créé l'override du controller, vous devez régénérer l'index des classes :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">\n# Supprimer le cache des classes\nrm -f var\u002Fcache\u002Fprod\u002Fclass_index.php\nrm -f var\u002Fcache\u002Fdev\u002Fclass_index.php\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ou depuis le back-office : \u003Cstrong>Paramètres avancés → Performances → Vider le cache\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>En PrestaShop 8.x, le système de cache Symfony peut également nécessiter un vidage :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">\nphp bin\u002Fconsole cache:clear --env=prod\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Comprendre Mail::Send() en profondeur\u003C\u002Fh2>\n\u003Cp>La méthode \u003Ccode>Mail::Send()\u003C\u002Fcode> est le point central d'envoi d'emails dans PrestaShop. Voici la signature complète avec les paramètres les plus utilisés :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\nMail::Send(\n    int $idLang,           \u002F\u002F ID de la langue\n    string $template,       \u002F\u002F Nom du template (sans extension)\n    string $subject,        \u002F\u002F Objet de l'email\n    array $templateVars,    \u002F\u002F Variables {clé} =&gt; valeur\n    string $to,             \u002F\u002F Email destinataire\n    string $toName,         \u002F\u002F Nom destinataire\n    string $from = null,    \u002F\u002F Email expéditeur (défaut: config boutique)\n    string $fromName = null,\u002F\u002F Nom expéditeur\n    array $fileAttachment = null,\n    null $mode_smtp = null,\n    string $templatePath = _PS_MAIL_DIR_,\n    bool $die = false,      \u002F\u002F Arrêter l'exécution en cas d'erreur\n    int $idShop = null,     \u002F\u002F ID boutique (multiboutique)\n    string $bcc = null,     \u002F\u002F Copie cachée\n    string $replyTo = null  \u002F\u002F Adresse de réponse\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Bonnes pratiques pour Mail::Send()\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>**Ne jamais coder en dur les adresses email.** Utilisez `Configuration::get('PS_SHOP_EMAIL')` pour récupérer l'email configuré dans le back-office.\u003C\u002Fli>\n\u003Cli>**Toujours passer l'ID de la langue** (`$this->context->language->id`) pour que le bon template linguistique soit sélectionné.\u003C\u002Fli>\n\u003Cli>**En multiboutique**, le paramètre `$idShop` est crucial pour que l'email utilise le bon en-tête et les bonnes coordonnées.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Alternative recommandée : utiliser un module\u003C\u002Fh2>\n\u003Cp>Pour une solution plus maintenable et compatible avec les mises à jour PrestaShop, l'approche \u003Cstrong>module\u003C\u002Fstrong> est préférable aux overrides. Un module peut s'accrocher au hook \u003Ccode>actionOrderReturn\u003C\u002Fcode> (disponible depuis PrestaShop 1.7.7) pour intercepter la création du retour sans modifier le controller :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic function hookActionOrderReturn(array $params)\n{\n    $orderReturn = $params['orderReturn'];\n    $carrier = Tools::getValue('return_carrier');\n    \n    \u002F\u002F Logique d'envoi email ici\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cette approche offre plusieurs avantages :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Aucun override** : pas de conflit avec d'autres modules\u003C\u002Fli>\n\u003Cli>**Mise à jour facilitée** : le hook survit aux mises à jour de PrestaShop\u003C\u002Fli>\n\u003Cli>**Activation\u002Fdésactivation** depuis le back-office sans toucher au code\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Résumé des fichiers modifiés\u003C\u002Fh2>\n\u003Ctr>\u003Cth>Fichier\u003C\u002Fth>\u003Cth>Action\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`themes\u002Fvotre-theme\u002Ftemplates\u002Fcustomer\u002Forder-return.tpl`\u003C\u002Fth>\u003Cth>Ajout des boutons radio\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`override\u002Fcontrollers\u002Ffront\u002FOrderReturnController.php`\u003C\u002Fth>\u003Cth>Traitement du choix + envoi email\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`mails\u002Ffr\u002Freturn_carrier_notification.html`\u003C\u002Fth>\u003Cth>Template email HTML\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`mails\u002Ffr\u002Freturn_carrier_notification.txt`\u003C\u002Fth>\u003Cth>Template email TXT\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`var\u002Fcache\u002Fprod\u002Fclass_index.php`\u003C\u002Fth>\u003Cth>À supprimer (régénération auto)\u003C\u002Fth>\u003C\u002Ftr>",[41,44,47,50,53],{"q":42,"a":43},"Comment ajouter un choix de transporteur dans le formulaire de retour produit PrestaShop ?","Il faut modifier le template Smarty du retour (order-return.tpl dans votre thème) pour ajouter des boutons radio avec les options de transporteur, puis créer un override du OrderReturnController pour traiter le choix via Tools::getValue() dans la méthode postProcess(). N'oubliez pas de vider le cache des classes après avoir créé l'override.",{"q":45,"a":46},"Pourquoi mon email Mail::Send() ne part pas dans PrestaShop ?","Les causes les plus fréquentes sont : le fichier template TXT manquant (le HTML seul ne suffit pas), un mauvais chemin dans le paramètre $templatePath, des variables template mal formatées (elles doivent être entourées d'accolades : {variable}), ou une configuration SMTP incorrecte dans le back-office. Activez le mode debug pour voir les erreurs détaillées.",{"q":48,"a":49},"Faut-il utiliser un override ou un module pour personnaliser le retour produit PrestaShop ?","Un module est toujours préférable pour la maintenabilité. Depuis PrestaShop 1.7.7, le hook actionOrderReturn permet d'intercepter la création d'un retour sans modifier le controller natif. Un module survit aux mises à jour, peut être activé\u002Fdésactivé depuis le back-office, et ne crée pas de conflit avec d'autres modules.",{"q":51,"a":52},"Comment récupérer les valeurs d'un formulaire dans un controller PrestaShop ?","Utilisez toujours la méthode Tools::getValue('nom_du_champ') qui récupère la valeur depuis $_POST ou $_GET de manière sécurisée avec échappement automatique. Ne jamais accéder directement à $_POST ou $_GET. Tools::getValue() accepte un second paramètre optionnel comme valeur par défaut si le champ n'existe pas.",{"q":54,"a":55},"Comment personnaliser les emails transactionnels de PrestaShop 8 ?","Créez vos templates dans le dossier mails\u002Ffr\u002F de votre thème (ou du module). Chaque email nécessite deux fichiers : un .html et un .txt portant le même nom. Les variables dynamiques s'écrivent entre accolades ({variable}) et sont passées via le tableau $templateVars de Mail::Send(). En PrestaShop 8.x, privilégiez les templates dans le thème plutôt que dans le dossier racine mails\u002F pour faciliter la maintenance.","Pour ajouter un choix de transporteur (Colissimo \u002F Mondial Relay) au formulaire de retour produit PrestaShop, modifiez le template front-office avec des boutons radio, traitez le choix dans un override de OrderReturnController via postProcess(), puis envoyez une notification email personnalisée avec Mail::Send(). L'approche module via le hook actionOrderReturn est recommandée pour la maintenabilité.",6,"2026-03-21T16:33:05.000Z",[],"PrestaShop pour les développeurs",{"items":62},[63,74,82,90,98,107,115,122],{"id":64,"type":65,"label":66,"href":68,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":69,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":71,"children":72,"psChildren":73},41,"link",{"fr":67},"Expertise","\u002Fexpertise",null,false,0,[],[],{"id":75,"type":65,"label":76,"href":78,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":69,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":79,"children":80,"psChildren":81},42,{"fr":77},"Blog","\u002Fblog",1,[],[],{"id":83,"type":65,"label":84,"href":86,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":69,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":87,"children":88,"psChildren":89},43,{"fr":85},"Modules PrestaShop","\u002Fmodules",2,[],[],{"id":91,"type":65,"label":92,"href":94,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":69,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":95,"children":96,"psChildren":97},44,{"fr":93},"Outils IA","\u002Foutils-ia",3,[],[],{"id":99,"type":65,"label":100,"href":102,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":103,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":104,"children":105,"psChildren":106},45,{"fr":101},"Offre Starter ✨","\u002Foffre-starter",{"highlight":20},4,[],[],{"id":108,"type":65,"label":109,"href":111,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":69,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":112,"children":113,"psChildren":114},46,{"fr":110},"Academy","\u002Facademy",5,[],[],{"id":116,"type":65,"label":117,"href":119,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":69,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":57,"children":120,"psChildren":121},47,{"fr":118},"À propos","\u002Fa-propos",[],[],{"id":123,"type":65,"label":124,"href":126,"icon":69,"description":69,"badge":69,"groupTitle":69,"style":69,"gridColumns":69,"cssClass":69,"psCategoryId":69,"showPsChildren":70,"position":127,"children":128,"psChildren":129},48,{"fr":125},"Contact","\u002Fcontact",7,[],[],{"columns":131},[132,144,174,190],{"title":133,"links":134},"Plateforme",[135,137,140,141],{"label":136,"href":102,"external":70},"Offre Starter (2 500 €)",{"label":138,"href":139,"external":70},"Devenir Ambassadeur","\u002Fambassadeur",{"label":85,"href":86,"external":70},{"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":70},"L'histoire","\u002Fsynedre",{"label":151,"href":152,"external":70},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":154,"href":155,"external":70},"L'équipe","\u002Fequipe",{"label":157,"href":158,"external":70},"Le réacteur en direct","\u002Freacteur",{"label":160,"href":161,"external":70},"Le Drill (entraînement)","\u002Fdrill",{"label":163,"href":164,"external":70},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":166,"href":167,"external":70},"Les agents IA","\u002Fagents-ia",{"label":169,"href":170,"external":70},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":172,"href":173,"external":70},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":175,"links":176},"Ressources",[177,178,179,182,184,187],{"label":77,"href":78,"external":70},{"label":110,"href":111,"external":70},{"label":180,"href":181,"external":70},"Dictionnaire","\u002Fdictionnaire",{"label":183,"href":68,"external":70},"Expertise PrestaShop",{"label":185,"href":186,"external":70},"Flywheel","\u002Fflywheel",{"label":188,"href":189,"external":70},"Manifeste","\u002Fmanifeste",{"title":118,"links":191},[192,194,197],{"label":193,"href":119,"external":70},"Alexandre Carette",{"label":195,"href":196,"external":70},"Dossier de presse","\u002Fpresse",{"label":125,"href":126,"external":70},{"footer":199},{"theme":200,"description":69,"hours":69,"logo":201,"contact":204,"social":205,"bottomBar":215},"dark",{"src":202,"href":203,"alt":193},"\u002Flogo-ac.svg","\u002F",{"email":69,"phone":69,"address":69,"cta":69},[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":69},{"header":217},{"logo":218,"topBar":221,"contactEmail":224,"features":225,"navBar":69},{"src":202,"alt":219,"text":193,"href":203,"class":220},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":69,"showLanguages":70,"align":222,"languages":223},"left",[],"contact@alexandrecarette.fr",{"showSearch":70,"showWishlist":70,"showLogin":20,"showContact":70,"showCart":70,"stickyHeader":20,"headerLayout":226},"inline",{"academy":228,"blog":229,"expertise":240},[],[230,234,237],{"title":231,"url":232,"score":79,"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":79,"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":79,"type":233},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[]]