Magento - 产品属性集的特定自定义设计布局

时间:2015-10-08 12:08:38

标签: magento layout attributes product

我的商店为Attribute Sets提供了两种不同类型的Simple Products

Default
Custom

对于属性集名称为Custom的所有产品,我需要从页面布局中删除以下部分:

<reference name="root">
    <remove name="header" />
    <remove name="breadcrumbs" />
    <remove name="footer" />
</reference>

有没有办法可以轻松地将此属性集中的所有产品分配为始终删除这3个部分。

我知道我可以将上述内容放在Custom Design Layout部分中,但我目前有超过100,000种产品的属性设置为自定义,因此逐个浏览不是一种选择。

1 个答案:

答案 0 :(得分:2)

对于这种情况,我们可以在事件Attribute Sets的{​​{1}}基础上添加新的布局处理程序。

活动: controller_action_layout_load_before

条件:产品属性集

所以,我在这个条件的基础上开始观察,这是添加新的 当前布局的处理程序

处理程序格式: controller_action_layout_load_before

观察员代码:

PRODUCT_ATTRIBUTE_SET_{ProdductAttributSetName}

Config.xml代码;

<?php
class [ModuleNameSpace]_[ModuleName]_Model_Observe{ 
/**
     * Before load layout event handler
     *
     * @param Varien_Event_Observer $observer
     */
    public function beforeLoadLayout($observer)
    {
        if($observer->getEvent()->getAction()->getFullActionName()=='catalog_product_view'){
        $product = Mage::registry('current_product');
        if($product):
        $layout = $observer->getEvent()->getLayout();
        $attributeSet = Mage::getModel('eav/entity_attribute_set')->load($product->getAttributeSetId());
        $handle = str_replace('-', '_', $product->formatUrlKey($attributeSet->getAttributeSetName()));

        $layout->getUpdate()->addHandle('PRODUCT_ATTRIBUTE_SET_'.$handle);
        // check all Handler 
        //Zend_Debug::dump($layout->getUpdate()->getHandles());
        endif;
        }
    return ;
    }


}

现在,在此处理程序中,您可以为布局和新的phtml添加新块。

假设您想要更改<global> <models> <[MyCustomModule_Model_Class_Groupname]> <class>[ModuleNameSpace]_[ModuleName]_Model</class> </[MyCustomModule_Model_Class_Groupname]> </models> </global> <frontend> <events> <controller_action_layout_load_before> <observers> <my_current_page_is_observer> <class>[MyCustomModule_Model_Class_Groupname]/observer</class> <method>beforeLoadLayout</method> </my_current_page_is_observer> </observers> </controller_action_layout_load_before> </events> </frontend> 的布局,那么您可以试试这个。

Custom attribute set  page