Aktuelle Fragestellung in unserer Webagentur im Rahmen einer Onlineshop Erstellung auf Magento 2 Basis: Wie lassen sich die Preise in der Produktdetailansicht und in der Artikellistenansicht ohne Nachkommstellen darstellen? Die gute Nachricht: Magento 2 lässt bei der Formatierung des Preises mit Hilfe der Funktion formatCurrency() einen optionalen Parameter "$precision" zu, der für die Darstellung / Rundung verantwortlich ist. Die schlechte Nachricht: In der Detailansicht wird per Javascript noch einmal "nachformatiert".

 

 

Das heißt: wir müssen an 2 Stellen eingreifen. Zuerst überschreiben wir die Template-Datei, die für die Ausspielung des Preises verantwortlich ist. So erstellen wir die Datei

 

/app/design/frontend/PACKAGE/TEHEME/Magento_Catalog/templates/product/price/amount/default.phtml

 

Hier fügen wir eben den oben erwähnten Parameter hinzu, in unserem Falle mit "0", so dass sich die Zeile

 

  ><?= $block->escapeHtml($block->formatCurrency($block->getDisplayValue(), (bool)$block->getIncludeContainer()), ['span']) ?></span>    ><?= $block->escapeHtml($block->formatCurrency($block->getDisplayValue(), (bool)$block->getIncludeContainer(),0), ['span']) ?></span>

 

verändert zu

 

  ><?= $block->escapeHtml($block->formatCurrency($block->getDisplayValue(), (bool)$block->getIncludeContainer(),0), ['span']) ?></span>    ><?= $block->escapeHtml($block->formatCurrency($block->getDisplayValue(), (bool)$block->getIncludeContainer(),0), ['span']) ?></span>

 

Hiermit sind die Dezimalstellen in der Listansicht der Produkte schon einmal weg. Jetzt bleibt noch die Produktdetailansicht. Hier wird zwar der Preis ohne Dezimalstellen geladen, aber eben durch ein Javascript nachträglich verändert, genauer durch price-utils.js des Mage_Catalog-Moduls.

 

Dies überschreiben wir nun, in dem wir in einem beliebigen Modul eine requirejs-config.js anlegen:

 

/app/code/VENDOR/MODULE/view/frontend/requirejs-config.js

 

mit dem folgenden Inhalt:

 

var config = {

    map: {

        '*': {

            "Magento_Catalog/js/price-utils": "VENDOR_MODULE/js/price-utils"

        }

    }

};

 

und dann gem. dem definierten Mapping die Datei

 

/app/code/VENDOR/MODULE/view/frontend/web/js/price-utils.js

 

anlegen, welche der Core-Datei entspricht.

 

Hier müssen wir dann nur vor der Zeile

 

precision = isNaN(format.requiredPrecision = Math.abs(format.requiredPrecision)) ? 2 : format.requiredPrecision;

 

die Anweisung

 

format.requiredPrecision = 0;

 

einfügen. Dabei immer darauf achten, dass Ihr bei Änderungen an der price-utils.js die pub/static-Datei löscht

 

/pub/static/frontend/PACKAGE/THEME/de_DE/VENDOR_MODULE/js/price-utils.js

 

Das war's. Gesehen in unserer Internetagentur in einem Onlineshop mit Magento 2.3.5.