Rundungsfehler in Magento

Leider gibt es einen derben Rundunsfehler in Magento, was bei größeren Beträgen einige Euros ausmachen kann. Hier die Lösung:

In: /app/code/core/Mage/Core/Model/Store.php
Zeile 740
return round($price, 2);
ändern in:
return round($price, 4);

In: \app\design\adminhtml\default\default\template\catalog\product\edit\price\tier.phtml
Zeile 161

ändern in:

In: app/code/core/Mage/Adminhtml/Block/Catalog/Product/Helper/Form/Price.php
Zeile 86
return number_format($value, 2, null, ‘’);
ändern in:
return number_format($value, 4, null, ‘’);

In: app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Option.php
Zeile 285
if ($type == ‘percent’) {
return number_format($value, 2, null, ‘’);
} elseif ($type == ‘fixed’) {
return number_format($value, 2, null, ‘’);
ändern in:
if ($type == ‘percent’) {
return number_format($value, 4, null, ‘’);
} elseif ($type == ‘fixed’) {
return number_format($value, 4, null, ‘’);

Magento Core-Dateien abändern und upgradefähig bleiben

Alle Core Dateien befinden ich in app/code/core/Mage… Will man also aus x-beliebigen Gründen die Core-Dateien anpassen, dann sollte man die abgeänderte Datei in derselben Ordnerstruktur in app/code/local/ ablegegen. Hier ein Beispiel:

app/code/core/Mage/Paypal/Model/Api/Standard.php
nach
app/code/local/Mage/Paypal/Model/Api/Standard.php

Alle Dateien in local werden immer bevorzugt behandelt, somit bleibet der Shop theoretisch immer Upgradefähig. Die Dateien in local werden bei einem Upgrade nicht angetastet.

Paypal auf Deutsch nach Checkout (Weiterleitung)

In der Magento-Version 1.4.1.1 wird nach dem Bestellabschluss auf die englische Paypal-Site geleitet. Jegliche Versuche auf deutsch umzustellen sind leider gescheitert, also habe ich mir den Code angeschaut und hab einfach in der Datei app/code/core/Mage/Paypal/Model/Api/Standard.php folgenden Eintrag in Zeile 140 hinzugefügt:

'country' => DE,

Somit habe ich “country” definiert und auf Deutsch gesetzt – funktioniert wunderbar!

Hier die ganze Funktion zum Abgleich (ab Zeile 131):

public function getStandardCheckoutRequest()<br />
{<br />
$request = $this->_exportToRequest($this->_commonRequestFields);<br />
$request['charset'] = 'utf-8';<br />
// cart line items<br />
if ($this->getLineItems()) {<br />
$this->_exportLineItems($request, 1);<br />
$request = array_merge($request, array(<br />
'cmd' => '_cart',<br />
'upload' => 1,<br />
'country' => DE,<br />
));<br />
}<br />
// aggregated order<br />
else {<br />
$request = $this->_exportToRequest($this->_aggregatedOrderFields, $request);<br />
$request = array_merge($request, array(<br />
'cmd' => '_ext-enter',<br />
'redirect_cmd' => '_xclick',<br />
));<br />
}<br />
// payer address<br />
$this->_importAddress($request);<br />
$this->_debug(array('request' => $request)); // TODO: this is not supposed to be called in getter<br />
return $request;<br />
}<br />

Anbei die modifiziert Datei:
Standard

Empfehlenswert ist, dass man die Datei in

app/code/local/Mage/Paypal/Model/Api/

ablegt, damit die Originaldatei nicht angetastet wird.

Mehr zum dem Thema hier.

Viel Erfolg!

Unterkategorien in Hauptkategorie mit Bildern ausgeben

Leider gibt Magento die Unterkategorien nicht in der Hauptkategorie aus. Dazu gibt es aber eine gute Lösung, die wie folgt aussieht:

Wohnzimmermöbel

1. Die Datei subcategory_listing.phtml in app/code/design/frontend/default/”mein_template”/template/catalog/navigation kopieren

2. Im Backend unter CMS/Statische Blöcke einen neuen Block anlegen mit folgenden Angaben:

  • Blocktitel: Sub Kategorien
  • Seitenbezeichner: sub_categories
  • Inhalt: {{block type=”catalog/navigation” template=”catalog/navigation/subcategory_listing.phtml”}}

3. Die jeweilige Hauptkategorie anklicken, und unter “Anzeige Einstellungen” -> CMS Block Sub Kategorien auswählen.

Die Kategoriebilder der Unterkategorien müssen 230px breit und 178px hoch sein, ansonsten passt es nicht in den Rahmen. Falls eine andere Größe gewünscht ist, muss man es dementsprechen über css anpassen.

Anbei noch die Dateien:
Subkategorien by enenko media

Viel Erfolg!

Schwarzer Hintergrund in generierten Bildern

Es kann vorkommen, dass die Produktbilder einen schwarzen Hintergrund haben. Dies kommt durch einen Bug in der Funktion imagefill() GD zustande. Es gibt zwei Möglichkeiten den Fehler zu beheben:

1. Man macht ein PHP-Upgrade auf eine neue PHP-Version

Falls dies nicht möglich ist:

2. Ersetzt man den Code:

return $color;

in der Datei /lib/Varien/Image/Adapter/Gd2.php mit

imagefilledrectangle($imageResourceTo, 0, 0, imagesx($imageResourceTo), imagesy($imageResourceTo), $color);<br />
return $color;<br />