1

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

4

1 回答 1

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();
    }
}
于 2016-10-06T06:22:04.833 回答