2016-10-05 1 views
1

Je veux changer le mode d'affichage de ma catégorie s'il y a des filtres actifs. Je mon événement config.xml est:Obtenir des filtres actifs dans l'observateur dans 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> 

Et mon observateur méthode:

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"); 
    } 
} 

Mais je ne suis pas capable d'obtenir des filtres actifs avec $appliedFilters = Mage::getSingleton('catalog/layer')->getState()->getFilters(); I Is fais quelque chose de mal ou mon événement est faux?

J'ai également essayé avec Mage::getSingleton('Mage_Catalog_Block_Layer_State')->getActiveFilters(); mais sans succès.

Répondre

0

Il n'y a pas d'événement unique approprié dans Magento pour ce que vous essayez de faire. Il y a une alternative à cela. Ajouter mise à jour suivante de mise en page via local.xml fichier:

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

Et créer un bloc qui va de Mage_Cms_Block_Block classe.

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(); 
    } 
}