Magento: Multiselect-Attribute auf Produktdetailseite
Mit Multiselect-Attributen lassen sich schöne Auflistungen von Produkteigenschaften unter einem bestimmten Kontext erzeugen. Beispielsweise die Qualitätsmerkmale (bruchfest, Fair Trade, feuerhemend, Zertifikate,...) eines Produkts.
Will man diese Liste auf der Produktdetailseite aber nun etwas hübscher gestalten, zum Beispiel mit Icons und weiterführenden Erklärungstexten zu den einzelnen Qualitätsmerkmalen, stößt man schnell auf ein Problem: Leider lassen sich den Attribut-Werten aber nur eingeschränkt Texte, oder gar Layout-Teile in Form von Markup zuweisen. Außerdem wäre das wirklich sehr unsauber.
Wir standen vor diesem Problem und haben es über eine Kombination aus Template-Logik und statischen Blöcken gelöst:
<?php
//$_product = Mage::registry('current_product');
// Attribut-Bezeichner
$attributeCode = 'attribut_code';
// Die Attribut-Werte als IDs besorgen
$usedAttributeIds = explode(',', $_product->getData($attributeCode));
// Model besorgen
$attributeModel = Mage::getSingleton('eav/config')->getAttribute('catalog_product', $attributeCode);
// Textbezeichner der einzelnen Attributwerte besorgen
$usedAttributeValues = $attributeModel->getSource()->getOptionText($_product->getData($attributeCode));
?>
<ul>
<?php foreach($usedAttributeValues as $key=>$value): ?>
<li>
<div>
<img src="<?php echo $this->getSkinUrl('images/attribut_code_icon_' . $usedAttributeIds[$key] . '.gif'); ?>" alt="Icon <?php echo $value; ?>" />
<strong><?php echo $value; ?></strong>
</div>
<div>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('attribut_code_desc_' . $usedAttributeIds[$key])->toHtml() ?>
</div>
</li>
<?php endforeach; ?>
</ul>
Voraussetzung ist, dass zu jeder verfügbaren Attribut-Wert-ID ein statischer Block mit dem Bezeichner "attribut_code_desc_<id>" existiert. Außerdem wird ein Icon über die gleiche Methode eingebunden. Natürlich lassen sich die Pfade und Bezeichner beliebig verändern.