[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$fTVheAvb7sSi3zDzjNLdDXT4Y9f1PT6Zyqb9t-wmeC2s":22,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":61,"megamenu":142,"footer-db":198,"$ftePR_2LW_lppP0P5dvjIHxY6P-BXvJ9vaNYSa-wjM_g":216,"header-db":230},{"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":34,"psVersions":35,"content":39,"faq":40,"tldr":56,"readingTime":57,"generatedAt":58,"publishDate":58,"relatedArticles":59,"sourceCategory":60},"Corriger la devise affichée dans le dashboard PrestaShop (DashGoals)","corriger-devise-dashboard-dashgoals-prestashop","Le tableau de bord PrestaShop affiche la mauvaise devise ? Découvrez comment corriger le problème de devise dans DashGoals et AdminController.","configuration",[28,29,30,31,32,33],"devise","dashboard","DashGoals","AdminController","back-office","currency","intermediaire",[36,37,38],"1.6","1.7","8.x","\u003Ch2>Le problème : devise incohérente entre front-office et back-office\u003C\u002Fh2>\n\u003Cp>Un cas classique sur PrestaShop : votre boutique affiche correctement les prix en euros (€) côté client, mais le tableau de bord back-office — notamment le module \u003Cstrong>DashGoals\u003C\u002Fstrong> — persiste à afficher les montants dans une autre devise (dollars, livres…). Les objectifs de vente, le chiffre d'affaires et les statistiques deviennent alors illisibles et incohérents.\u003C\u002Fp>\n\u003Cp>Ce décalage provient de la manière dont PrestaShop initialise la devise dans le contexte administrateur. Contrairement au front-office qui respecte la devise par défaut de la boutique active, le back-office charge la devise définie dans \u003Ccode>PS_CURRENCY_DEFAULT\u003C\u002Fcode> — une valeur qui peut être désynchronisée, notamment après une migration, un import de configuration ou un changement de devise principale.\u003C\u002Fp>\n\u003Ch2>Comprendre l'origine du bug\u003C\u002Fh2>\n\u003Ch3>Le mécanisme d'initialisation de la devise\u003C\u002Fh3>\n\u003Cp>Dans le contrôleur d'administration (\u003Ccode>AdminController.php\u003C\u002Fcode>), PrestaShop initialise le contexte avec cette ligne :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n$this-&gt;context-&gt;currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cette instruction récupère l'identifiant stocké dans la table \u003Ccode>ps_configuration\u003C\u002Fcode> pour la clé \u003Ccode>PS_CURRENCY_DEFAULT\u003C\u002Fcode>. Si cet identifiant pointe vers le dollar (id 1 par défaut sur une installation anglophone) alors que votre boutique fonctionne en euros, tout le back-office affichera les montants en dollars.\u003C\u002Fp>\n\u003Ch3>Pourquoi PS_CURRENCY_DEFAULT peut être faux\u003C\u002Fh3>\n\u003Cp>Plusieurs scénarios courants :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Installation initiale en anglais** puis passage en français : la devise par défaut reste le dollar.\u003C\u002Fli>\n\u003Cli>**Import de configuration** depuis un autre environnement avec des identifiants de devise différents.\u003C\u002Fli>\n\u003Cli>**Suppression puis recréation** de devises : les identifiants auto-incrémentés ne correspondent plus.\u003C\u002Fli>\n\u003Cli>**Multiboutique** : chaque boutique peut avoir sa propre valeur de `PS_CURRENCY_DEFAULT`, source de confusion.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Solution 1 : corriger la configuration (méthode recommandée)\u003C\u002Fh2>\n\u003Cp>Avant de toucher au code, vérifiez et corrigez la valeur en base de données :\u003C\u002Fp>\n\u003Ch3>Étape 1 — Identifier l'ID de votre devise euro\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">\nSELECT id_currency, name, iso_code, active\nFROM ps_currency\nWHERE iso_code = 'EUR';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Notez l'\u003Ccode>id_currency\u003C\u002Fcode> retourné (par exemple : \u003Ccode>2\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Ch3>Étape 2 — Vérifier la valeur actuelle de PS_CURRENCY_DEFAULT\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">\nSELECT * FROM ps_configuration\nWHERE name = 'PS_CURRENCY_DEFAULT';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Étape 3 — Mettre à jour si nécessaire\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">\nUPDATE ps_configuration\nSET value = 2\nWHERE name = 'PS_CURRENCY_DEFAULT';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Remplacez \u003Ccode>2\u003C\u002Fcode> par l'identifiant réel de votre devise euro. En contexte \u003Cstrong>multiboutique\u003C\u002Fstrong>, vérifiez également la table \u003Ccode>ps_configuration_lang\u003C\u002Fcode> et les valeurs par boutique dans \u003Ccode>ps_configuration\u003C\u002Fcode> (colonne \u003Ccode>id_shop\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Ch3>Étape 4 — Vider le cache\u003C\u002Fh3>\n\u003Cp>Supprimez le contenu du dossier \u003Ccode>var\u002Fcache\u002F\u003C\u002Fcode> (PrestaShop 1.7+\u002F8.x) ou \u003Ccode>cache\u002F\u003C\u002Fcode> (PrestaShop 1.6), puis videz le cache de votre navigateur. PrestaShop met en cache les valeurs de configuration : sans cette étape, le changement peut ne pas être visible immédiatement.\u003C\u002Fp>\n\u003Ch2>Solution 2 : override de AdminController (solution de contournement)\u003C\u002Fh2>\n\u003Cp>Si la correction en base de données ne suffit pas ou si vous avez besoin d'un contrôle plus fin, vous pouvez forcer la devise via un override.\u003C\u002Fp>\n\u003Ch3>PrestaShop 1.6\u003C\u002Fh3>\n\u003Cp>Créez le fichier \u003Ccode>override\u002Fclasses\u002Fcontroller\u002FAdminController.php\u003C\u002Fcode> :\u003C\u002Fp>\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 AdminController extends AdminControllerCore\n{\n    public function init()\n    {\n        parent::init();\n\n        \u002F\u002F Forcer la devise du back-office sur l'euro\n        \u002F\u002F Remplacez l'ID par celui de votre devise principale\n        $euroId = (int) Currency::getIdByIsoCode('EUR');\n        if ($euroId) {\n            $this-&gt;context-&gt;currency = new Currency($euroId);\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Après avoir créé l'override, supprimez le fichier \u003Ccode>cache\u002Fclass_index.php\u003C\u002Fcode> pour que PrestaShop détecte la nouvelle classe.\u003C\u002Fp>\n\u003Ch3>PrestaShop 1.7 \u002F 8.x\u003C\u002Fh3>\n\u003Cp>Le principe reste le même, mais le chemin du cache change :\u003C\u002Fp>\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 AdminController extends AdminControllerCore\n{\n    public function init()\n    {\n        parent::init();\n\n        $euroId = (int) Currency::getIdByIsoCode('EUR');\n        if ($euroId) {\n            $this-&gt;context-&gt;currency = new Currency($euroId);\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Supprimez ensuite le contenu de \u003Ccode>var\u002Fcache\u002Fprod\u002F\u003C\u002Fcode> et \u003Ccode>var\u002Fcache\u002Fdev\u002F\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Bonne pratique :\u003C\u002Fstrong> utilisez \u003Ccode>Currency::getIdByIsoCode('EUR')\u003C\u002Fcode> plutôt qu'un identifiant en dur. Cela rend votre override portable entre environnements (dev, preprod, prod) où les identifiants peuvent différer.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Vérification et diagnostic\u003C\u002Fh2>\n\u003Cp>Après correction, vérifiez ces points :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Dashboard (Tableau de bord)** : les objectifs DashGoals doivent afficher le symbole € et les montants corrects.\u003C\u002Fli>\n\u003Cli>**Statistiques** : naviguez dans les modules Stats pour confirmer la cohérence.\u003C\u002Fli>\n\u003Cli>**Commandes** : ouvrez une commande récente — le récapitulatif doit correspondre au front-office.\u003C\u002Fli>\n\u003Cli>**Front-office** : vérifiez qu'aucun impact collatéral n'a affecté l'affichage client.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Script de diagnostic rapide\u003C\u002Fh3>\n\u003Cp>Exécutez cette requête pour avoir une vue complète de votre configuration devise :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">\nSELECT\n    c.id_currency,\n    c.iso_code,\n    c.active,\n    c.deleted,\n    conf.value AS is_default\nFROM ps_currency c\nLEFT JOIN ps_configuration conf\n    ON conf.name = 'PS_CURRENCY_DEFAULT'\n    AND conf.value = c.id_currency\nORDER BY c.id_currency;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>La ligne avec \u003Ccode>is_default\u003C\u002Fcode> non NULL est votre devise par défaut actuelle.\u003C\u002Fp>\n\u003Ch2>Précautions en contexte multiboutique\u003C\u002Fh2>\n\u003Cp>En multiboutique, chaque shop peut définir sa propre devise par défaut. L'override global affectera \u003Cstrong>toutes les boutiques\u003C\u002Fstrong>. Si vos boutiques utilisent des devises différentes, adaptez la logique :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic function init()\n{\n    parent::init();\n\n    \u002F\u002F Utiliser la devise par défaut de la boutique courante\n    $idShop = (int) $this-&gt;context-&gt;shop-&gt;id;\n    $defaultCurrencyId = (int) Configuration::get('PS_CURRENCY_DEFAULT', null, null, $idShop);\n\n    if ($defaultCurrencyId) {\n        $this-&gt;context-&gt;currency = new Currency($defaultCurrencyId);\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Résumé des bonnes pratiques\u003C\u002Fh2>\n\u003Ctr>\u003Cth>Approche\u003C\u002Fth>\u003Cth>Avantage\u003C\u002Fth>\u003Cth>Inconvénient\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Correction en base\u003C\u002Fth>\u003Cth>Propre, pas de code\u003C\u002Fth>\u003Cth>Nécessite un accès SQL\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Override AdminController\u003C\u002Fth>\u003Cth>Contrôle fin, portable\u003C\u002Fth>\u003Cth>Code à maintenir lors des mises à jour\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>ID en dur dans l'override\u003C\u002Fth>\u003Cth>Rapide\u003C\u002Fth>\u003Cth>Fragile, non portable\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`getIdByIsoCode()`\u003C\u002Fth>\u003Cth>Portable, robuste\u003C\u002Fth>\u003Cth>Légère requête SQL supplémentaire\u003C\u002Fth>\u003C\u002Ftr>",[41,44,47,50,53],{"q":42,"a":43},"Pourquoi le tableau de bord PrestaShop affiche-t-il les prix en dollars au lieu d'euros ?","Le back-office utilise la valeur PS_CURRENCY_DEFAULT de la table ps_configuration pour initialiser la devise du contexte administrateur. Si cette valeur pointe vers le dollar (souvent id 1 sur une installation par défaut), tous les modules du dashboard — dont DashGoals — afficheront les montants en dollars, même si le front-office est correctement configuré en euros. Corrigez la valeur en base de données ou utilisez un override de AdminController.",{"q":45,"a":46},"Comment forcer la devise euro dans le back-office PrestaShop sans modifier le core ?","Créez un override de AdminController dans override\u002Fclasses\u002Fcontroller\u002FAdminController.php. Dans la méthode init(), après l'appel à parent::init(), utilisez Currency::getIdByIsoCode('EUR') pour récupérer dynamiquement l'ID de l'euro et l'assigner au contexte. N'oubliez pas de vider le cache (class_index.php en 1.6, var\u002Fcache\u002F en 1.7+\u002F8.x).",{"q":48,"a":49},"La devise du dashboard est incorrecte après une migration PrestaShop, que faire ?","Lors d'une migration, les identifiants auto-incrémentés des devises peuvent changer. Vérifiez l'ID actuel de votre devise principale avec SELECT id_currency, iso_code FROM ps_currency, puis mettez à jour PS_CURRENCY_DEFAULT dans ps_configuration avec le bon identifiant. Videz ensuite tous les caches (base de données, fichiers et navigateur).",{"q":51,"a":52},"Le problème de devise concerne-t-il aussi PrestaShop 8.x ?","Oui, le mécanisme d'initialisation de la devise dans AdminController reste fondamentalement le même dans PrestaShop 8.x. La correction en base de données et l'approche par override fonctionnent de manière identique. Toutefois, PrestaShop 8.x encourage l'utilisation de modules et de services Symfony plutôt que les overrides classiques pour les nouvelles personnalisations.",{"q":54,"a":55},"Comment vérifier quelle devise est définie par défaut dans PrestaShop ?","Exécutez la requête SQL : SELECT c.iso_code, conf.value FROM ps_configuration conf JOIN ps_currency c ON c.id_currency = conf.value WHERE conf.name = 'PS_CURRENCY_DEFAULT'. Vous pouvez aussi vérifier dans le back-office via International > Localisation > Configuration, où la devise par défaut est affichée.","Le dashboard PrestaShop (DashGoals) peut afficher la mauvaise devise si PS_CURRENCY_DEFAULT pointe vers un mauvais identifiant. Corrigez la valeur en base de données ou créez un override d'AdminController utilisant Currency::getIdByIsoCode() pour forcer la devise correcte.",5,"2026-03-21T15:51:47.000Z",[],"PrestaShop pour les développeurs",{"columns":62},[63,79,109,130],{"title":64,"links":65},"Plateforme",[66,70,73,76],{"label":67,"href":68,"external":69},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":71,"href":72,"external":69},"Devenir Ambassadeur","\u002Fambassadeur",{"label":74,"href":75,"external":69},"Modules PrestaShop","\u002Fmodules",{"label":77,"href":78,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":80,"links":81},"Le Synedre",[82,85,88,91,94,97,100,103,106],{"label":83,"href":84,"external":69},"L'histoire","\u002Fsynedre",{"label":86,"href":87,"external":69},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":89,"href":90,"external":69},"L'équipe","\u002Fequipe",{"label":92,"href":93,"external":69},"Le réacteur en direct","\u002Freacteur",{"label":95,"href":96,"external":69},"Le Drill (entraînement)","\u002Fdrill",{"label":98,"href":99,"external":69},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":101,"href":102,"external":69},"Les agents IA","\u002Fagents-ia",{"label":104,"href":105,"external":69},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":107,"href":108,"external":69},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":110,"links":111},"Ressources",[112,115,118,121,124,127],{"label":113,"href":114,"external":69},"Blog","\u002Fblog",{"label":116,"href":117,"external":69},"Academy","\u002Facademy",{"label":119,"href":120,"external":69},"Dictionnaire","\u002Fdictionnaire",{"label":122,"href":123,"external":69},"Expertise PrestaShop","\u002Fexpertise",{"label":125,"href":126,"external":69},"Flywheel","\u002Fflywheel",{"label":128,"href":129,"external":69},"Manifeste","\u002Fmanifeste",{"title":131,"links":132},"À propos",[133,136,139],{"label":134,"href":135,"external":69},"Alexandre Carette","\u002Fa-propos",{"label":137,"href":138,"external":69},"Dossier de presse","\u002Fpresse",{"label":140,"href":141,"external":69},"Contact","\u002Fcontact",{"items":143},[144,153,159,165,173,181,186,192],{"id":145,"type":146,"label":147,"href":123,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":150,"children":151,"psChildren":152},41,"link",{"fr":148},"Expertise",null,0,[],[],{"id":154,"type":146,"label":155,"href":114,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":156,"children":157,"psChildren":158},42,{"fr":113},1,[],[],{"id":160,"type":146,"label":161,"href":75,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":162,"children":163,"psChildren":164},43,{"fr":74},2,[],[],{"id":166,"type":146,"label":167,"href":169,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":170,"children":171,"psChildren":172},44,{"fr":168},"Outils IA","\u002Foutils-ia",3,[],[],{"id":174,"type":146,"label":175,"href":68,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":177,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":178,"children":179,"psChildren":180},45,{"fr":176},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":182,"type":146,"label":183,"href":117,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":57,"children":184,"psChildren":185},46,{"fr":116},[],[],{"id":187,"type":146,"label":188,"href":135,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":189,"children":190,"psChildren":191},47,{"fr":131},6,[],[],{"id":193,"type":146,"label":194,"href":141,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":69,"position":195,"children":196,"psChildren":197},48,{"fr":140},7,[],[],{"footer":199},{"theme":200,"description":149,"hours":149,"logo":201,"contact":204,"social":205,"bottomBar":215},"dark",{"src":202,"href":203,"alt":134},"\u002Flogo-ac.svg","\u002F",{"email":149,"phone":149,"address":149,"cta":149},[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":149},{"academy":217,"blog":218,"expertise":229},[],[219,223,226],{"title":220,"url":221,"score":156,"type":222},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back","blog",{"title":224,"url":225,"score":156,"type":222},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",{"title":227,"url":228,"score":156,"type":222},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[],{"header":231},{"logo":232,"topBar":235,"contactEmail":238,"features":239,"navBar":149},{"src":202,"alt":233,"text":134,"href":203,"class":234},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":149,"showLanguages":69,"align":236,"languages":237},"left",[],"contact@alexandrecarette.fr",{"showSearch":69,"showWishlist":69,"showLogin":20,"showContact":69,"showCart":69,"stickyHeader":20,"headerLayout":240},"inline"]