3 Stimmen

Wie kann der Name der Attributgruppe auf der Produktseite angezeigt werden?

Ich habe Attributsätze mit mehr Gruppiert Attribute im Inneren. In admin sind die benutzerdefinierten Attribute in Gruppen angezeigt (Registerkarten), wie ich sie erstellt habe. Aber auf der Produktseite sind alle Attribute zusammen aufgeführt werden, ohne dass der Name der Attributgruppe angezeigt wird bevor Sie die Attribute in dieser Gruppe auflisten.

Wie kann ich auch die Namen der Attributgruppen und nicht nur die Attribute anzeigen? Wenn Sie mir die Standardvorlage zeigen könnten, werde ich sie in meiner benutzerdefinierten Vorlage entsprechend anpassen.

Ich danke Ihnen!

5voto

Theophilos Punkte 81

Ok, ich habe eine Antwort gefunden und ich hoffe, dass sie für andere, die dasselbe suchen, nützlich ist. Erstens: Ich verwende Magento 1.5.0. Zweitens, ich habe die Antwort auf Deutsch gefunden aquí mit einer bereits erstellten Erweiterung, aber die Installation schlug fehl. Also, ich habe hinzugefügt /app/code/local/Mage/Catalog/Block/Product/View/Attributesgroups.php mit dem folgenden Code:

<?php
class Mage_Catalog_Block_Product_View_Attributesgroups extends Mage_Core_Block_Template
{
    protected $_product = null;

    function getProduct()
    {
        if (!$this->_product) {
            $this->_product = Mage::registry('product');
        }
        return $this->_product;
    }

    public function getAdditionalData(array $excludeAttr = array())
    {
        $data = array();

        $product = $this->getProduct();
        $attributes = $product->getAttributes();
        foreach ($attributes as $attribute) {

            if ($attribute->getIsVisibleOnFront() && !in_array($attribute->getAttributeCode(), $excludeAttr)) {

                $value = $attribute->getFrontend()->getValue($product);

                // TODO this is temporary skipping eco taxes
                if (is_string($value)) {
                    if (strlen($value) && $product->hasData($attribute->getAttributeCode())) {
                        if ($attribute->getFrontendInput() == 'price') {
                            $value = Mage::app()->getStore()->convertPrice($value,true);
                        } elseif (!$attribute->getIsHtmlAllowedOnFront()) {
                            $value = $this->htmlEscape($value);
                        }

                        $group = 0;
                        if( $tmp = $attribute->getData('attribute_group_id') ) {
                            $group = $tmp;
                        }

                        $data[$group]['items'][ $attribute->getAttributeCode()] = array(
                           'label' => $attribute->getFrontend()->getLabel(),
                           'value' => $value,
                           'code'  => $attribute->getAttributeCode()
                        );

                        $data[$group]['attrid'] = $attribute->getId();

                    }
                }
            }
        }

        // Noch Titel lesen
        foreach( $data AS $groupId => &$group ) {
            $groupModel = Mage::getModel('eav/entity_attribute_group')->load( $groupId );
            $group['title'] = $groupModel->getAttributeGroupName();
        }

        return $data;
    }
}

Dann habe ich die /app/design/frontend/default/YOUR_TEMPLATE/template/katalog/produkt/ansicht/attributegroups.phtml Datei mit dem folgenden Inhalt:

<?php
    $_helper = $this->helper('catalog/output');
    $_product = $this->getProduct()
?>
<?php if($_additionalgroup = $this->getAdditionalData()): ?>
<div class="box-collateral box-additional">
    <h2><?php echo $this->__('Additional Information') ?></h2>

    <?php $i=0; foreach ($_additionalgroup as $_additional): $i++; ?>
        <h3><?php echo $this->__( $_additional['title'] )?></h3>
        <table class="data-table" id="product-attribute-specs-table-<?php echo $i?>">
            <col width="25%" />
            <col />
            <tbody>
            <?php foreach ($_additional['items'] as $_data): ?>
                <tr>
                    <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
                    <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
                </tr>
            <?php endforeach; ?>
            </tbody>
        </table>
        <script type="text/javascript">decorateTable('product-attribute-specs-table-<?php echo $i?>')</script>
    <?php endforeach; ?>

</div>
<?php endif;?>

Der letzte Schritt war die Änderung /app/design/frontend/default/YOUR_TEMPLATE/layout/catalog.xml in Zeile 223, und ersetzt

<block type="catalog/product_view_attributes" name="product.attributes" as="additional" template="catalog/product/view/attributes.phtml">

mit

<block type="catalog/product_view_attributesgroups" name="product.attributes" as="additional" template="catalog/product/view/attributesgroups.phtml">

Ich wiederhole, diese Antwort stammt NICHT von mir, ich habe nur übersetzt, was ich gefunden habe. Vielen Dank an die wunderbaren Menschen, die meine dreitägige Suche mit einer klaren und einfachen Antwort beendet haben: WebGuys.DE Danke auch an @rpSetzer, der geholfen hat!

0voto

Paul Grigoruta Punkte 2306

Iterieren Sie durch alle Attribute und erstellen Sie ein Array von Gruppen. In jede Gruppe fügen Sie die zugehörigen Attribute ein. Dann ist es einfach, sie so anzuzeigen, wie Sie es wünschen.

Hier ist eine Implementierung, die dem, was Sie brauchen, sehr ähnlich ist.

0voto

Felix Punkte 1

Vielen Dank für die Übersetzung: zusätzliche Informationen für diejenigen, die es brauchen könnten:

  1. Für den 1. Schritt, wenn der Ordner /app/code/local/Mage/Catalog/Block/Product/View/ nicht existiert, erstellen Sie ihn! mit den richtigen Berechtigungen und platzieren Sie die Datei Attributesgroups.php dort

  2. Wenn Sie verschiedene Shop-Ansichten (für verschiedene Sprachen) haben und die korrekte Übersetzung für jede Attributbezeichnung verwenden möchten, müssen Sie Folgendes tun: In der Datei Attributesgroups.php Ersetzen Sie 'label' => $attribute->getFrontend()->getLabel(), mit 'label' => $attribute->getStoreLabel(),

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X