Как отобразить имя группы атрибутов на странице продукта? - PullRequest
3 голосов
/ 26 марта 2011

Я создал Наборы атрибутов с большим количеством Сгруппированных атрибутов внутри. В admin пользовательские атрибуты отображаются в группах (вкладки), как я их создал. Но на странице продукта все атрибуты перечислены вместе, без отображения имени группы атрибутов перед перечислением атрибутов в этой группе.

Как я могу отображать также имена групп атрибутов, а не только атрибуты? Если бы вы могли показать мне шаблон по умолчанию, я сделаю это соответствующим образом в своем пользовательском шаблоне.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 28 марта 2011

Хорошо, я нашел ответ и надеюсь, что он будет полезен другим в поиске того же самого. Во-первых, я использую Magento 1.5.0. Во-вторых, я нашел ответ на немецком здесь с уже созданным расширением, но установка не удалась. Итак, я добавил / app / code / local / Mage / Catalog / Block / Product / View / Attributesgroups.php со следующим кодом:

<?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;
    }
}

Затем я создал файл / app / design / frontend / default / YOUR_TEMPLATE / template / catalog / product / view / attributegroups.phtml со следующим содержимым:

<?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;?>

Последним шагом было изменение / app / design / frontend / default / YOUR_TEMPLATE / layout / catalog.xml в строке 223 и замена

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

с

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

Повторяю, этот ответ НЕ принадлежит мне, я просто перевёл то, что нашел. Большое спасибо прекрасным людям, которые завершили мои три дня поиска простым и ясным ответом: WebGuys.DE Кроме того, спасибо @rpSetzer, который помог вам!

0 голосов
/ 17 октября 2013

Спасибо за перевод: дополнительная информация для тех, кому может понадобиться:

  1. Для первого шага, если папка / app / code / local / Mage / Catalog / Block / Product / View / не существует, создайте ее! с правильными разрешениями и поместите туда файл Attributesgroups.php

  2. Если у вас разные представления магазина (для разных языков), и вы хотите использовать правильный перевод для каждой метки атрибута, вот что вам нужно сделать: В файле Attributesgroups.php Заменить 'label' => $attribute->getFrontend()->getLabel(), на 'label' => $attribute->getStoreLabel(),

0 голосов
/ 26 марта 2011

Переберите все атрибуты и создайте массив групп. В каждой группе вы помещаете атрибуты, которые принадлежат ей. Тогда их просто отобразить так, как вы хотели.

Здесь - это реализация, которая очень близка к тому, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...