Категории для многоуровневой навигации в Magento - PullRequest
1 голос
/ 12 мая 2011

Я хочу улучшить многоуровневую навигацию в Magento.

В настоящее время атрибуты, которые используются в многоуровневой навигации, не могут быть сгруппированы, то есть если у вас есть несколько атрибутов, которые логически находятся в одной группе (то есть атрибуты "высота", "ширина" и "глубина", которые являются "Размеры ", а также" цвет "и" текстура "находятся в разделе" Внешний вид ".

Я думаю, что это улучшит удобство использования и навигацию для пользователей.

Прежде чем я начну и начнуРазрабатывая модуль для этого, мне было интересно, сталкивался ли кто-нибудь с подобным для magento, и если нет, то есть ли у вас какие-либо советы, как это сделать?

Джозеф

Ответы [ 2 ]

5 голосов
/ 12 мая 2011

Я создал модуль для этого.Вот изменения, которые я сделал:

MyName / Navigation / Catalog / Model / Layer.php:

class MyName_Navigation_Catalog_Model_Layer extends Mage_Catalog_Model_Layer {
    public function getFilterableAttributes()
    {
        $setIds = $this->_getSetIds();
        if (!$setIds) {
            return array();
        }

        $collection = Mage::getResourceModel('catalog/product_attribute_collection')
            ->setItemObjectClass('catalog/resource_eav_attribute');

        $collection->addSetInfo(true);

        $collection->getSelect()->distinct(true);
        $collection
            ->setAttributeSetFilter($setIds)
            ->addStoreLabel(Mage::app()->getStore()->getId())
            ->setOrder('position', 'ASC');

        $collection = $this->_prepareAttributeCollection($collection);
        $collection->load();

        return $collection;
    }
}

Я просто переписываю переопределенную функцию из Mage_Catalog_Model_Layer с этим добавлением строки:

        $collection->addSetInfo(true);

Это гарантирует, что данные группы будут загружены, когда мне это нужно.

Следующие два изменения просто позволят вам получить доступ к данным.

MyName /Навигация / Каталог / Модель / Слой / Attribute.php:

class MyName_Navigation_Catalog_Model_Layer_Filter_Attribute extends Mage_Catalog_Model_Layer_Filter_Attribute {

    public function getGroupName($setId = 4) {       
        $attribute = $this->getAttributeModel();
        $group_id = $attribute->getData('attribute_set_info/' . $setId . '/group_id');
        $group = Mage::getModel('eav/entity_attribute_group')->load($group_id);
        $group_name = $group->getData('attribute_group_name');

        return $group_name;
    }

}

MyName / Навигация / Каталог / Модель / Слой / Item.php:

class MyName_Navigation_Catalog_Model_Layer_Filter_Item extends Mage_Catalog_Model_Layer_Filter_Item {
    public function getGroupName()
    {
        return $this->getFilter()->getGroupName();
    }
}

MyName / Навигация / Каталог /Block / Layer / Filter / Attribute.php:

class MyName_Navigation_Catalog_Block_Layer_Filter_Attribute extends Mage_Catalog_Block_Layer_Filter_Attribute {
    public function getGroupName() {
        return $this->_filter->getGroupName();
    }
}

Скажите magento использовать мой модуль, а не файлы ядра.MyName / Navigation / etc / config.xml

<?xml version="1.0" encoding="UTF-8"?>

<config>
    <modules>
        <MyName_Navigation>
            <version>0.1.0</version>
        </MyName_Navigation>
    </modules>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <layer_filter_attribute>MyName_Navigation_Catalog_Block_Layer_Filter_Attribute</layer_filter_attribute>
                </rewrite>
            </catalog>
        </blocks>
        <models>
            <catalog>
                <rewrite>
                    <layer>MyName_Navigation_Catalog_Model_Layer</layer>
                    <layer_filter_attribute>MyName_Navigation_Catalog_Model_Layer_Filter_Attribute</layer_filter_attribute>
                    <layer_filter_item>MyName_Navigation_Catalog_Model_Layer_Filter_Item</layer_filter_item>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

Теперь вы можете позвонить

$_item->getGroupName();

из вашего файла шаблона: template / catalog / layer / filter.php или

$ _ фильтр-> getGroupName ();из вашего файла шаблона: template / catalog / layer / view.php и Group / Sort оттуда атрибуты.

0 голосов
/ 12 мая 2011

Код для отфильтрованной навигации долгое время был на форумах Magento, он все еще работает в самых последних версиях:

http://www.magentocommerce.com/boards/viewthread/5500/

Это может обеспечитьчто вам нужно, чтобы настроить внешний вид отфильтрованной навигации в соответствии с вашими потребностями.

Вы также можете определить в своем атрибуте порядок сортировки в многоуровневой навигации.Вместо того, чтобы использовать «1, 2, 3», выберите «100, 200, 300», чтобы в дальнейшем вы могли определить, скажем, «ширина», равную 210 и т. Д., И распределить атрибуты в соответствии с нужным порядком сортировки.

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