Я хочу изменить режим отображения своей категории, если есть активные фильтры. У меня есть событие 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();
}
}
Других решений пока нет …