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