Magento – Hersteller in Produktansicht

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

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:

Kommentare

8 Antworten

  1. Brigitte sagt:

    Hi Sebastian,

    das sieht bzw. liest sich sehr interessant, kann man dies irgendwo live bewundern??

    LG Brigitte

  2. admin sagt:

    @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.

  3. Brigitte sagt:

    Super, danke, habe Probleme mit der Vorstellungskraft ;-) , muss meistens sehen…. sieht aber klasse aus!
    Werde den shop bestimmt besuchen…., als werdende Oma ;-)

    LG Brigitte

  4. nikl sagt:

    Sehr hilfreich, Danke!

  5. nikl sagt:

    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.

  6. admin sagt:

    @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.

  7. nikl sagt:

    Ist zwar schon eine Weile her, trotzdem noch mal danke, jetzt ist es perfekt! :D

  8. Franger sagt:

    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

Hinterlasse eine Antwort