设置Magento事件数据

时间:2012-08-02 22:50:02

标签: magento

所以,没有人对如何设置事件数据有很好的解释。我已经阅读了很多关于getEvent的帖子,并且只在setEvent上找到了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>

1 个答案:

答案 0 :(得分:2)

Varien_Event扩展了Varien_Object,因此您可以通过调用

来设置任何参数
$observer->getEvent()->setData('you_parameter', 'some_ value'); 

$observer->getEvent()->setYourParameter('some_ value');

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