2016-10-05 9 views
1

활성 필터가있는 경우 카테고리 표시 모드를 변경하고 싶습니다.옵저버에서 활성 필터를 magento로 가져 오기

<events> 
     <catalog_block_product_list_collection> 
      <observers> 
       <mycustom_module_observer> 
        <type>singleton</type> 
        <class>Mycustom_Module_Model_Observer</class> 
        <method>setCategoryDisplayMode</method> 
       </mycustom_module_observer> 
      </observers> 
     </catalog_block_product_list_collection> 
    </events> 

그리고 내 관찰자 방법은 다음과 같습니다 : 내 config.xml의 이벤트는 한

public function setCategoryDisplayMode(Varien_Event_Observer $observer) 
{ 
    $category = Mage::registry('current_category'); 
    $appliedFilters = Mage::getSingleton('catalog/layer') 
     ->getState() 
     ->getFilters(); 
    if (!empty($appliedFilters)) { 
     $category->setDisplayMode("PRODUCTS"); 
    } 
} 

하지만 내가 뭔가 잘못하고 오전 $appliedFilters = Mage::getSingleton('catalog/layer')->getState()->getFilters();와 활성 필터를 얻을 수 없습니다 오전 또는 내 이벤트 인 잘못된?

나는 또한 Mage::getSingleton('Mage_Catalog_Block_Layer_State')->getActiveFilters();으로 시도했지만 성공하지 못했습니다.

답변

0

Magento에서 수행하려는 작업에 적합한 단일 이벤트가 없습니다. 대안이 있습니다.

<catalog_category_layered> 
    <reference name="content"> 
     <block type="namespace_module/category" name="namespace.module.category.cmsblock" before="-"/> 
    </reference> 
</catalog_category_layered> 

을 그리고 Mage_Cms_Block_Block 클래스에서 확장 블록을 만들 : local.xml 파일을 통해 레이아웃 업데이트 다음을 추가합니다.

class Namespace_Module_Block_Category extends Mage_Cms_Block_Block 
{ 
    protected function _toHtml() 
    { 
     $filters = array(); 
     $appliedFilters = Mage::getSingleton('catalog/layer')->getState()->getFilters(); 
     if (!empty($appliedFilters)) { 
      $category->setDisplayMode("PRODUCTS"); 
     } 
     return parent::_toHtml(); 
    } 
}