How to extend a CMS block to save a Magento event?

I have this XML structure in my Alchemy directory module:

<?xml version="1.0" encoding="UTF-8"?> <!-- @filepath /app/code/local/Alchemy/Catalog/etc The XML has been extended following Magento Events API Observers http://www.excellencemagentoblog.com/magento-part11-series-eventsapi or http://blog.chapagain.com.np/magento-event-observer-with-save-before-and-save-after/ --> <config> <modules> <Alchemy_Catalog> <version>0.1.0</version> </Alchemy_Catalog> </modules> <global> <models> <alchemycatalog> <rewrite> <product>Alchemy_Catalog_Model_Product</product> <block>Alchemy_Catalog_Model_Block</block> </rewrite> </alchemycatalog> </models> <events> <!-- Examples: catalog_product_save_before, catalog_product_prepare_save Check out Magento events cheat sheet at http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ --> <catalog_product_save_after> <observers> <Alchemy_Catalog> <type>singleton</type> <class>Alchemy_Catalog_Model_Product</class> <method>pingBaseProductService</method> </Alchemy_Catalog> </observers> </catalog_product_save_after> <catalog_category_save_after> <observers> <Alchemy_Catalog> <type>singleton</type> <class>Alchemy_Catalog_Model_Product</class> <method>pingBaseCategoryService</method> </Alchemy_Catalog> </observers> </catalog_category_save_after> <cms_block_save_before> <observers> <Alchemy_Catalog> <type>singleton</type> <class>Alchemy_Catalog_Model_Block</class> <method>rabbitmqBlockProducer</method> </Alchemy_Catalog> </observers> </cms_block_save_before> </events> </global> </config> 

and this model, which must register a message in order to prove that it works:

 <?php class Alchemy_Catalog_Model_Block extends Mage_Cms_Model_Block { /** * Implement function rabbitmqBlockProducer(). * This function writes a message to the rabbit * mq server */ protected $_eventPrefix = 'cms_block'; public function rabbitmqBlockProducer ($event) { Mage::log('save3 block invoked', null, 'marian.log'); } /** * Prevent blocks recursion * * @throws Mage_Core_Exception * @return Mage_Core_Model_Abstract */ protected function _beforeSave() { Mage::log('save2 block invoked', null, 'marian.log'); } } 

But the rabbitmqBlockProducer () method is never called. Note. Other methods for the product and catalog work very well.

Any help fixing this or any other method would be appreciated.

+7
magento
source share
1 answer

Mage_Cms_Model_Block does not override the _eventPrefix property, so it should only trigger two common events before saving: model_save_before and core_abstract_save_before .

If you are already rewriting the CMS block model, you can simply override the _eventPrefix property and set it to cms_block ; this will allow your supervisor to work. However, since you are already doing rewriting and using your model as an observer, you can simply override the _beforeSave() method and add your logic and a bit of stuff there.

Change Your rewriting file does not work. Rewrite syntax for cms/block model

 <global> <models> <cms> <rewrite> <block>Alchemy_Catalog_Model_Block</block> </rewrite> </cms> </models> </global> 
+7
source share

All Articles