I had a look around the site but can't find any existing threads would solve my problem. I have an extension to exclude some products and categories before rendering the sitemap.xml. I use Mage::log to record if those methods are fired.
While I tested on local machine, everything works fine. They correctly excluded some specified categories and products and also generated log files in /var/log
folder.
When I deployed the codes onto the server, only method beforeLoadLayout
worked and logs generated.
The methods excludeProductsFromSitemap
and excludeCategoriesFromSitemap
are not working at all. Neither logs generate.
- Cache is flushed every time I update codes
- Compilation is always disabled
Here is my config.xml
<?xml version="1.0"?>
<config>
<modules>
<My_Ext>
<version>0.1.2</version>
</My_Ext>
</modules>
<global>
<!-- models -->
<models>
<myext>
<class>My_Ext_Model</class>
</myext>
</models>
<!-- helpers -->
<helpers>
<myext>
<class>My_Ext_Helper</class>
</myext>
</helpers>
<events>
<sitemap_products_generating_before>
<observers>
<myext>
<class>myext/observer</class>
<method>excludeProductsFromSitemap</method>
</myext>
</observers>
</sitemap_products_generating_before>
<sitemap_categories_generating_before>
<observers>
<myext>
<class>myext/observer</class>
<method>excludeCategoriesFromSitemap</method>
</myext>
</observers>
</sitemap_categories_generating_before>
</events>
</global>
<frontend>
<events>
<core_block_abstract_prepare_layout_before>
<observers>
<myext>
<type>model</type>
<class>myext/observer</class>
<method>beforeLoadLayout</method>
</myext>
</observers>
</core_block_abstract_prepare_layout_before>
</events>
</frontend>
I also tried other way to write the <events>
like below but result is the same as above:
<events>
<sitemap_products_generating_before>
<observers>
<myext>
<class>My_Ext_Model_Observer</class>
<method>excludeProductsFromSitemap</method>
</myext>
</observers>
</sitemap_products_generating_before>
<sitemap_categories_generating_before>
<observers>
<myext>
<class>My_Ext_Model_Observer</class>
<method>excludeCategoriesFromSitemap</method>
</myext>
</observers>
</sitemap_categories_generating_before>
</events>
Here is my Observer.php:
<?php
class My_Ext_Model_Observer {
public function excludeCategoriesFromSitemap( Varien_Event_Observer $observer ) {
Mage::log( 'in excludeCategoriesFromSitemap', null, '000_debug.log' );
$event = $observer->getEvent();
$collection = $event->getCollection();
$items = $this->getFilteredItems( $observer, 'category' );
$collection->setItems( $items );
}
public function excludeProductsFromSitemap( Varien_Event_Observer $observer ) {
Mage::log( 'in excludeProductsFromSitemap', null, '000_debug.log' );
$event = $observer->getEvent();
$collection = $event->getCollection();
$items = $this->getFilteredItems( $observer, 'product' );
$collection->setItems( $items );
}
private function getFilteredItems( $observer, $type ) {
// Not called by event directly and works fine so not copied
return $items;
}
public function beforeLoadLayout( Varien_Event_Observer $observer ) {
Mage::log( 'in beforeLoadLayout', null, '000_debug.log' );
// Works find on local and server so not copied
}
}
I also tried to writing the class like class My_Ext_Model_Observer extends Mage_Core_Model_Observer
but problem remains the same.
I appreciate if anyone can come up with anything I haven't tried. Lots of thanks.