在magento的观察者中获得活动过滤器



如果有活动过滤器,我想更改我的类别显示模式。我的config.xml事件是:

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

我的观察者的方法是:

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();,但没有成功。

在Magento中没有合适的单一事件适合您要做的事情。还有另一种选择。通过local.xml文件添加以下布局更新:

<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类的块

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

最新更新