⚙️ ConfigurationIntermédiaire PS 1.6 PS 1.7 PS 8.x

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.

Publié le 21 mars 2026 5 min de lecture Alexandre Carette

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 :

  1. **Dashboard (Tableau de bord)** : les objectifs DashGoals doivent afficher le symbole € et les montants corrects.
  2. **Statistiques** : naviguez dans les modules Stats pour confirmer la cohérence.
  3. **Commandes** : ouvrez une commande récente — le récapitulatif doit correspondre au front-office.
  4. **Front-office** : vérifiez qu'aucun impact collatéral n'a affecté l'affichage client.
  5. 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

    ApprocheAvantageInconvénient Correction en basePropre, pas de codeNécessite un accès SQL Override AdminControllerContrôle fin, portableCode à maintenir lors des mises à jour ID en dur dans l'overrideRapideFragile, non portable `getIdByIsoCode()`Portable, robusteLégère requête SQL supplémentaire
#devise #dashboard #DashGoals #AdminController #back-office #currency

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

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.