2012-08-02 82 views
0

因此,没有人对如何设置事件数据有很好的解释。我已经阅读了大量关于getEvent的文章,并且只在setEvent上找到了Magento文档。设置Magento事件数据

如何在* before_save中设置事件数据(从观察者返回)?

代码

public function onCategorySaveBefore($observer) 
{ 
    $rules = Mage::getResourceModel('categoryrules/rules_collection'); 
    $keepSpecialFlag = 1; 
    $event = $observer->getEvent(); 
    $categoryId = $event->getCategory()->getId(); 
    foreach ($rules as $r) { 
     if ($r['category_id'] != $categoryId) { 
      $keepSpecialFlag = 0; 
     } 
    } 

    if ($keepSpecialFlag==0) { 
#code needs saved here. something like $event->setData('rogue_category_rule', 0); 
    } 
    return; 
} 

config.xml中

<catalog_category_save_before> 
    <observers> 
     <categoryrules> 
      <type>singleton</type> 
      <class>categoryrules/observer</class> 
      <method>onCategorySaveBefore</method> 
     </categoryrules> 
    </observers> 
</catalog_category_save_before> 

回答

2

Varien_Event延伸Varien_Object,这样你就可以通过调用

$observer->getEvent()->setData('you_parameter', 'some_ value'); 

设置任何参数

编辑: 但你也应该检查Mage_Core_Model_App::dispatchEvent方法imlpementation。也许Magento为每个观察者实例化新事件。将某些值设置为事件是非常糟糕的主意。通常事件是不可变的对象。

+0

谢谢Serjio。我在不久之前就明白了这一点。然而,欣赏答案! – 2012-08-03 15:09:57