Corriger la devise affichée dans le dashboard PrestaShop (DashGoals)
Le tableau de bord PrestaShop affiche la mauvaise devise ? Découvrez comment corriger le problème de devise dans DashGoals et AdminController.
En bref : 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.
Le problème : devise incohérente entre front-office et back-office
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 DashGoals — 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.
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 PS_CURRENCY_DEFAULT — une valeur qui peut être désynchronisée, notamment après une migration, un import de configuration ou un changement de devise principale.
Comprendre l'origine du bug
Le mécanisme d'initialisation de la devise
Dans le contrôleur d'administration (AdminController.php), PrestaShop initialise le contexte avec cette ligne :
$this->context->currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
Cette instruction récupère l'identifiant stocké dans la table ps_configuration pour la clé PS_CURRENCY_DEFAULT. 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.
Pourquoi PS_CURRENCY_DEFAULT peut être faux
Plusieurs scénarios courants :
- **Installation initiale en anglais** puis passage en français : la devise par défaut reste le dollar.
- **Import de configuration** depuis un autre environnement avec des identifiants de devise différents.
- **Suppression puis recréation** de devises : les identifiants auto-incrémentés ne correspondent plus.
- **Multiboutique** : chaque boutique peut avoir sa propre valeur de `PS_CURRENCY_DEFAULT`, source de confusion.
Solution 1 : corriger la configuration (méthode recommandée)
Avant de toucher au code, vérifiez et corrigez la valeur en base de données :
Étape 1 — Identifier l'ID de votre devise euro
SELECT id_currency, name, iso_code, active
FROM ps_currency
WHERE iso_code = 'EUR';
Notez l'id_currency retourné (par exemple : 2).
Étape 2 — Vérifier la valeur actuelle de PS_CURRENCY_DEFAULT
SELECT * FROM ps_configuration
WHERE name = 'PS_CURRENCY_DEFAULT';
Étape 3 — Mettre à jour si nécessaire
UPDATE ps_configuration
SET value = 2
WHERE name = 'PS_CURRENCY_DEFAULT';
Remplacez 2 par l'identifiant réel de votre devise euro. En contexte multiboutique, vérifiez également la table ps_configuration_lang et les valeurs par boutique dans ps_configuration (colonne id_shop).
Étape 4 — Vider le cache
Supprimez le contenu du dossier var/cache/ (PrestaShop 1.7+/8.x) ou cache/ (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.
Solution 2 : override de AdminController (solution de contournement)
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.
PrestaShop 1.6
Créez le fichier override/classes/controller/AdminController.php :
<?php
/**
* @author Alexandre Carette <contact@alexandrecarette.fr>
* @copyright 2026 Alexandre Carette
* @license Propriétaire et Confidentiel
*/
class AdminController extends AdminControllerCore
{
public function init()
{
parent::init();
// Forcer la devise du back-office sur l'euro
// Remplacez l'ID par celui de votre devise principale
$euroId = (int) Currency::getIdByIsoCode('EUR');
if ($euroId) {
$this->context->currency = new Currency($euroId);
}
}
}
Après avoir créé l'override, supprimez le fichier cache/class_index.php pour que PrestaShop détecte la nouvelle classe.
PrestaShop 1.7 / 8.x
Le principe reste le même, mais le chemin du cache change :
<?php
/**
* @author Alexandre Carette <contact@alexandrecarette.fr>
* @copyright 2026 Alexandre Carette
* @license Propriétaire et Confidentiel
*/
class AdminController extends AdminControllerCore
{
public function init()
{
parent::init();
$euroId = (int) Currency::getIdByIsoCode('EUR');
if ($euroId) {
$this->context->currency = new Currency($euroId);
}
}
}
Supprimez ensuite le contenu de var/cache/prod/ et var/cache/dev/.
Bonne pratique : utilisez
Currency::getIdByIsoCode('EUR')plutôt qu'un identifiant en dur. Cela rend votre override portable entre environnements (dev, preprod, prod) où les identifiants peuvent différer.
Vérification et diagnostic
Après correction, vérifiez ces points :
- **Dashboard (Tableau de bord)** : les objectifs DashGoals doivent afficher le symbole € et les montants corrects.
- **Statistiques** : naviguez dans les modules Stats pour confirmer la cohérence.
- **Commandes** : ouvrez une commande récente — le récapitulatif doit correspondre au front-office.
- **Front-office** : vérifiez qu'aucun impact collatéral n'a affecté l'affichage client.
Script de diagnostic rapide
Exécutez cette requête pour avoir une vue complète de votre configuration devise :
SELECT
c.id_currency,
c.iso_code,
c.active,
c.deleted,
conf.value AS is_default
FROM ps_currency c
LEFT JOIN ps_configuration conf
ON conf.name = 'PS_CURRENCY_DEFAULT'
AND conf.value = c.id_currency
ORDER BY c.id_currency;
La ligne avec is_default non NULL est votre devise par défaut actuelle.
Précautions en contexte multiboutique
En multiboutique, chaque shop peut définir sa propre devise par défaut. L'override global affectera toutes les boutiques. Si vos boutiques utilisent des devises différentes, adaptez la logique :
public function init()
{
parent::init();
// Utiliser la devise par défaut de la boutique courante
$idShop = (int) $this->context->shop->id;
$defaultCurrencyId = (int) Configuration::get('PS_CURRENCY_DEFAULT', null, null, $idShop);
if ($defaultCurrencyId) {
$this->context->currency = new Currency($defaultCurrencyId);
}
}
Résumé des bonnes pratiques
Questions fréquentes
Tout ce que vous devez savoir sur ce sujet.
Un projet PrestaShop ?
Discutons-en directement.
193 projets livrés
Lire sur le blog

Alexandre Carette
Expert PrestaShop & Architecture E-commerce
Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.