2015-10-08 98 views
0

我的店裏有2種不同類型的Attribute SetsSimple ProductsMagento的 - 特定的自定義設計佈局產品屬性設置

Default 
Custom 

我所有的產品,有Custom屬性集的名字,我需要刪除以下從頁面佈局部分:

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

有沒有一種方法,我可以輕鬆地分配所有的產品在此屬性設置爲始終除去這3個部分。

我知道我可以將上述內容放在Custom Design Layout部分,但我目前有超過100,000個產品的屬性設置爲自定義,因此逐個瀏覽不是一個選項。

回答

2

對於這種情況,我們可以在事件controller_action_layout_load_before上添加基於Attribute Sets的新佈局處理程序。

事件:controller_action_layout_load_before

條件:產品屬性設置

於是,我就基本這個條件是在當前佈局 添加新
處理程序的啓動觀察員。

處理程序格式:PRODUCT_ATTRIBUTE_SET_{ProdductAttributSetName}

觀察代碼:

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


} 

的Config.xml代碼;

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

現就本此處理程序,你可以添加一個新的塊佈局和新的PHTML。

假設,你想改變Custom attribute set page的佈局,那麼你可以試試這個。

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