0

そのため、イベント データの設定方法について適切な説明ができる人はいません。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>
4

1 に答える 1

2

Varien_EventextendsVarien_Objectであるため、呼び出して任意のパラメーターを設定できます

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

また

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

編集:ただし、Mage_Core_Model_App::dispatchEventメソッドの実装も確認する必要があります。おそらく、Magento はオブザーバーごとに新しいイベントをインスタンス化します。そして、いくつかの値をイベントに設定するのは本当に悪い考えです。通常、イベントは不変オブジェクトです。

于 2012-08-03T15:06:54.173 に答える