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

时间:2016-10-05 12:04:07

标签: php magento layered-navigation

如果有活动过滤器,我想更改类别显示模式。我的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();但没有成功。

1 个答案:

答案 0 :(得分:0)

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