Man kann beliebige Attribute an beliebiger Stelle in der Artikelansicht des Shops anzeigen lassen. Was braucht man dafür?
1. Den Namen / Code des anzuzeigenden Attributes
2. Die Datei, die die Anzeige übernehmen soll
3. Ein Stückchen Code
Zu 1. legt man entweder das Attribut neu an oder schaut in die Attribute im Backend ( Katalog > Attribute > Attribute verwalten). Dort merkt man sich den “Attribut Code”. Ich möchte die Lieferzeit anzeigen lassen (MRG übernimmt dies ja, da MRG für Magento 1.6 aber noch nicht geht….) daher merke ich mir “delivery_time“.
Zu 2. Die Datei, die die Anzeige übernimmt kann vielfältig sein: z.B. app/design/frontend/[base oder default]/[IhrTemplate]/template/catalog/product/view.phtml oder auch wenige Ordner tiefer (view/type) die default.phtml. Diese Datei verwende ich, da ich die Lieferzeit unter der schon eingeblendeten Verfügbarkeit eingeblendet haben möchte. Andere Dateien können sehr einfach z.B. über System > Konfiguration > Entwickleroptionen > Debug > Vorlagen Pfadhinweise herausgefunden werden.
Zu 3. Das Stückchen Code lautet (für Freitext Attribute)
<?php echo $this->__('Anzuzeigender Name') ?> <?php echo $_product->getHIER denAttributCode() ?>
bei mir wäre dies dann
<?php echo $this->__('Delivery Time:') ?> <?php echo $_product->getdelivery_time() ?>
Für Dropdown Attribute muss <?php echo $_product->getdelivery_time() ?> durch
<?php echo $_product->getAttributeText('AttributCode') ?>
ersetzt werden.
Für “Ja” / “Nein” Attribute durch dies ersetzen:
<?php echo $_product->getAttributCode() ? "Yes" : "No" ?>
Den Code an der richtigen Stelle in der Datei einbauen.
Wenn alle drei Schritte befolgt werden, kann spätestens nach eine Cache Reload das Ergebis bewundert werden.
Schwieriger wird es bei Mehrfachauswahl Attributen. Mit dem o.g. Code werden leider nur die Attribut Wert IDs ausgegeben und nicht die Bezeichnungen. Daher muss hier ein deutlich umständlicherer Code verwendet werden.
In der o.g. Datei werden an beliebiger Stelle folgende Zeilen hinzugefügt:
<?php echo $this->__('Hier Ihr Text VOR den Attributen') ?> <?php $multiSelectArray = $this->getProduct()->getAttributeText('ATTRIBUTCODE'); $lastItem = end($multiSelectArray); foreach($multiSelectArray as $multiSelectItem){ echo $multiSelectItem; if($multiSelectItem != $lastItem) echo ", "; } ?>
Wie immer auf die korrekte Übernahme der Anführungszeichen etc. achten (beim Kopieren).
Genutzt in Magento Versionen 1.5.1.0 und 1.6.1.0. Fragen? Kommentare? Anregungen? Gerne!
Danke für den Blogpost! Sehr schön erklärt. Ich wollte nur kurz ergänzen, dass die getter- (und setter-) Methoden in Camel-Case geschrieben werden müssten, um den Magento Coding-Guidelines zu entsprechen. Aus getdelivery_time() müsste getDeliveryTime() werden. Die Unterstriche werden entfernt, und der jeweils folgende Buchstabe wird in groß geschrieben.
Alternativ, wenn einem diese Umformung nicht gefällt, könnte auch getData(‘delivery_time’) genutzt werden.
Danke für den ergänzenden Hinweis und die schönen Extensions aus der Netzarbeiter Produktion!
Kann man den Code auch in die list.phtml eintragen? Würde gerne Attribute in der List View anzeigen?
Hallo, was meinen Sie mit “List View”? Die Kategorie Ansicht (Artikel unter einander wenn man eine Kategorie öffnet)?
Kann man den Code auch in die list.phtml eintragen? Würde gerne Attribute in der produkt übersicht bzw. in der kategorie übersicht anzeigen lassen nicht nur in den einzelnen produkte?!
Also jeweils bei dem Produkt in der Listen Ansicht der Kategorie?
ja genau
Vielleicht hilft das:
Habe es selber aber nicht ausprobiert.
Hi und danke für die Anleitung. Klappt super!
Was muss man denn machen wenn man zwei Sprachen hat?
Ich möchte z.B. in Deutsch das Attribut “Spieldauer” anzeigen. Im Englischen soll das aber “Playlength” heissen.
Wäre super wenn es hierfür auch eine Lösung gibt…
Hilft es hier nicht, die Attribute zu übersetzen? http://www.commercers.com/blog/magento-sort-by-price-position-name-ubersetzen-nicht-in-translate-csv-sondern-backend-attribute/
Leider nicht. Im Backend ist alles richtig eingestellt und übersetzt. Das liegt wohl eher daran das mit
__(‘Anzuzeigender Name’) ?> getHIER denAttributCode() ?>
Der Name ja Bereits “festgelegt” wird. Aber wie mache ich das anders so das “Azuzeigender Name” eben auf den jeweiligen aktiven Storeview geholt wird?
Vielen Dank für diese Anleitung.
Für ein DropDown-Attribut (delivery_time) habe ich folgenden Code in die view.phtml eingefügt: __(‘Lieferzeit:’) ?>getAttributeText(‘delivery_time’) ?>
Leider bekomme ich aber einen Fehler auf der Produktseite:
Lieferzeit: Fatal error: Call to a member function getSource() on a non-object in /home/deelite/www/batterien-dinkels/app/code/core/Mage/Catalog/Model/Product.php on line 1389
Ich nutze Magento 1.7
Kann mir da vielleicht jemand helfen?
Danke, habe lange nach der Problemlösung gesucht! Hier ist sie! You Made My Day!