Magento – Hersteller in Produktansicht
Montag, den 20. Juli 2009 | Magento
Da Magento von Hause aus leider nicht die Möglichkeit mitbringt, Herstellerinformationen zu Hinterlegen, musste ich das für ein aktuelles Projekt über einen kleinen Workaround realisieren. Die Grundlage für die Umsetzung ist das bereits vorhandene Attribut “Manufacturer” und entsprechnde CMS-Blöcke.
1. Schritt – Eintragen der Hersteller
In der Administrationsoberfläche von Magento rufen Sie auf: Katalog -> Attribute -> Attribute verwalten.
Suchen Sie nach dem Attribut “manufacturer”.
Das Attributlabel muss hier zwingend “Hersteller” lauten. Ansonsten müssen Sie u.U. die Abfrage in der View (weiter unten) anpassen.
Wir bearbeiten nun die Bezeichnungen / Optionen und legen zunächst mal alle unsere Hersteller an. Dabei sollten Sie für diesen Workaround auf Sonderzeichen verzichten (komm ich später noch mal drauf zurück).
2. Schritt – CMS Blöcke anlegen
In der Administration rufen Sie auf: CMS -> Statische Blöcke -> Neuen Block anlegen.
Blocktitel: Name des Hersteller. Hier “Wingreen”. Damit man später immer weiß, dass es sich um eine Herstellerblock handelt, lassen Sie den Seitenbezeichner am besten immer mit der Zeichenfolge “man-” starten. Das ist wichtig, benötigen wir dann später auch in der View. Verwenden Sie ein andere Zeichenfolge oder verzichten Sie darauf, müssen Sie u.U. die Abfrage in der View (weiter unten) anpassen. Ebenso dürfen an dieser Stelle KEINE Leerzeichen und auch keine Sonderzeichen verwendet werden. Die Schreibweise muss zwingend die gleiche sein, wie die Bezeichnung der Option im Attribut.
Status: aktiviert (wichtig!)
Inhalt: Hier kommt jetzt die Herstellerinformation. HTML erlaubt, Sie können also auch Bilder und Links einfügen und die Informationen beliebig formatieren.
Beispiel:
Attribut Option: Wingreen and Friends
CMS-Block Seitenbezeichner: man-wingreenandfriends
3. Schritt – Produktview anpassen.
Diesen Schritt kann man mit Sicherheit viel eleganter umsetzen, aber ich bin Frontender. Weitergehende PHP Kenntnisse sind leider nicht mein Gebiet. Hier freue ich mich jederzeit über Feedback und Tipps.
Editor Ihrer Wahl: Wir bearbeiten nun die Datei, die in der Produktansicht die Attribute ausgibt. Wichtig: in Ihrem aktivierten Tempalte. “/app/design/frontend/default/default/template/catalog/product/view/attributes.phtml”
Hier wird in Zeile 11 die Variable $myType gesetzt und ausgegeben.
In Zeile 14 prüfe ich, ob das Label ($myType) “Hersteller” ist, denn dann möchte ich den entsprechenden CMS-Block ausgeben.
Verwenden Sie in Ihrem Attributset ein anderes Attributlabel, so müssen Sie diese Prüfung anpassen.
Jetzt konstruieren wir aus dem Value des Hersteller Attributes die passende Block-ID. Mit str_replace entfernen wir alle Leerzeichen und setzen unseren (in Schritt 2 verwendeten) Prefix davor.
Zeile 16 platziert dann den CMS-Block mit der ID aus $myManufacturer in die Seite.
Falls es sich nicht um die Angabe des Herstellers, sondern z.B. um Gewicht oder Farbe handelt, geben wir in Zeile 18 den ursprünglichen Value des Attributes aus.
Der Code (bestehende attributes.phtml kann komplett ersetzt werden) (UPDATE unten beachten)
<?php
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct()
?>
<?php if($_additional = $this->getAdditionalData()): ?>
<div class="collateral-box attribute-specs">
<table cellspacing="0" class="data-table" id="product-attribute-specs-table">
<?php foreach ($_additional as $_data): ?>
<tr>
<td class="label">
<?php $myType=$this->htmlEscape($this->__($_data['label'])); echo $myType; ?></td>
<td class="data">
<?php
if ($myType == "Hersteller"):
$myManufacturer="man-".str_replace(' ', '',$_helper->productAttribute($_product, $_data['value'], $_data['code']));
echo $this->getLayout()->createBlock('cms/block')->setBlockId($myManufacturer)->toHtml();
else:
echo $_helper->productAttribute($_product, $_data['value'], $_data['code']);
endif;
?>
</td>
</tr>
<?php endforeach; ?>
</table>
<script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
</div>
<?php endif;?>
Finished. Auf der Produktseite wird nun die im CMS angelegte Herstellerinformation angezeigt.
Screenshot (Liveshop comming soon)
Magento - Herstellerinformationen in Produktview
Mehrsprachigen Installationen
Bei mehrsprachigen Installationen sollten Sie die Seitenbezeichner der CMS Blöcke nicht nur mit “man-” beginnen lassen, sondern zusätzlich die Sprache integrieren. Zum Beispiel: “man-en-”… Die Prüfung des Labels (Schritt 3) muss dann über eine ODER Prüfung erweitert werden und die Konstruktion der Block-ID abgepast werden.
UPDATE
Hier nochmal etwas modifiziert der Code, damit man den Herstellernamen anzeigen lässt, wenn kein entsprechender statischer Block hinterlegt ist.
<?php
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct()
?>
<?php if($_additional = $this->getAdditionalData()): ?>
<div class="collateral-box attribute-specs">
<table cellspacing="0" class="data-table" id="product-attribute-specs-table">
<?php foreach ($_additional as $_data): ?>
<tr>
<td class="label">
<?php
$myType=$this->htmlEscape($this->__($_data['label']));
if ($myType == "Hersteller"):
$myManufacturer="man-".str_replace(' ', '',$_helper->productAttribute($_product, $_data['value'], $_data['code']));
$myManufacturer=str_replace('ä', 'ae',$myManufacturer);
$myManufacturer=str_replace('ö', 'oe',$myManufacturer);
$myManufacturer=str_replace('ü', 'ue',$myManufacturer);
$myBlock = $this->getLayout()->createBlock('cms/block')->setBlockId($myManufacturer)->toHtml();
endif;
echo $myType;
?>
</td>
<td class="data">
<?php
if ($myType == "Hersteller"):
if($myBlock):
echo $myBlock;
else:
echo $_helper->productAttribute($_product, $_data['value'], $_data['code']);
endif;
else:
echo $_helper->productAttribute($_product, $_data['value'], $_data['code']);
endif;
?>
</td>
</tr>
<?php endforeach; ?>
</table>
<script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
</div>
<?php endif;?>
Tags: Magento
Du kannst die Kommentare zu diesen Eintrag durch den RSS 2.0 Feed verfolgen. Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.
20. Juli 2009 um 17:16
Hi Sebastian,
das sieht bzw. liest sich sehr interessant, kann man dies irgendwo live bewundern??
LG Brigitte
20. Juli 2009 um 18:00
@Brigitte
Ich habe oben mal einen Screenshot zugefügt. Der Liveshop befindet sich noch in der Testphase und wird voraussichtlich erst in einigen Tagen geöffnet.
20. Juli 2009 um 18:28
Super, danke, habe Probleme mit der Vorstellungskraft
, muss meistens sehen…. sieht aber klasse aus!
Werde den shop bestimmt besuchen…., als werdende Oma
LG Brigitte
17. September 2009 um 09:44
Sehr hilfreich, Danke!
17. September 2009 um 11:47
Leider schaffe mich es nicht, das die Optionen angezeigt werden, wenn kein Statischer Block von mir angegeben wird, d.h. gebe ich keinen Hersteller Block an, so ist die Zeile “Hersteller” einfach leer, anstatt zumindest die ursprüngliche HerstellerBezeichnung auszugeben.
07. Oktober 2009 um 14:39
@nikl Ja, das stimmt. Ich habe den Post inzwischen geupdatet. Jetzt wird entweder der statische Block eingebunden oder, wenn dieser nicht vorhanden ist, nur der Herstellername.
20. Januar 2010 um 18:43
Ist zwar schon eine Weile her, trotzdem noch mal danke, jetzt ist es perfekt!
04. August 2010 um 22:02
Hallo Sebastian,
ich muss mich bei Dir bedanken, du hast mir mit Deinem Tutorial den Tag gerettet
Funktioniert wunderbar und sieht klasse aus
Grüsse aus der Bretagne
Chris