2012-08-02 75 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