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