Magento 1 16.1.2013

Magento-Bug: Individuelle Optionen und Staffelpreise - 100% Ersparnis

Ein bekannter Bug in Magento ist die falsche Anzeige der prozentualen Ersparnis bei Staffelpreisen eines Artikels in Verbindung mit individuellen Optionen.

Wenn man nun aber individuelle Optionen hinzufügt, stimmt die Anzeige der Ersparnis nicht mehr. Das vom Magento generierte Markup ist richtig, dh. die Ersparnis in Prozent wird richtig berechnet, aber durch ein Update auf der Client-Seite wird diese Ersparnis falsch angezeigt.

Dieses Problem wurde auch schon im Magento Forum beschrieben und besprochen: Simple Product Tier Pricing and Custom Options drop down issue. Das Problem resultiert aus dem Nichtvorhandensein einiger CSS-Classen in den umgebenden Tags für die Preise. Der Lösungsansatz im Forum ist, die Javascript-Datei js/varien/product.js anzupassen. Dieser Weg funktioniert, ist aber nicht sehr schön, weil nicht updatesicher - beim nächsten Update werden die Änderungen überschrieben.

Wir empfehlen deshalb, die Änderung stattdessen in einer Template-Datei vorzunehmen.

In dieser Datei die folgenden Zeilen: app/design/frontend/base/default/template/catalog/product/view/tierprices.phtml, Zeile 32-34

$_product = $this->getProduct();
$_tierPrices = $this->getTierPrices();
$_finalPriceInclTax = $this->helper('tax')->getPrice($_product, $_product->getFinalPrice(), true);

ändern in:

$_product = $this->getProduct();
$_tierPrices = array();

foreach($this->getTierPrices() as $index => $info) {
    $_tierPrices[$index] = $info;
    $_tierPrices[$index]['formated_price'] = str_replace('class="price"', 'class="price tier-'.$index.'"', $info['formated_price']);
    $_tierPrices[$index]['formated_price_incl_tax'] = str_replace('class="price"', 'class="price tier-'.$index.' tier-'.$index.'-incl-tax"', $info['formated_price_incl_tax']);
}
$_finalPriceInclTax = $this->helper('tax')->getPrice($_product, $_product->getFinalPrice(), true);

Diese Datei sollte natürlich nicht im Default-Theme des Base-Templates geändert, sondern in das eigene Theme (z.B. "default/custom") kopiert werden.