Ich versuche zu haken catalog_product_save_after Ereignis. Hier ist config.xmlMagento EDA-System, wie Ereignisschleife zu vermeiden?
<events>
<catalog_product_save_after>
<observers>
<observer_name_here>
<class>My_Class_Model_Observer</class>
<method>methodToCall</method>
<type>singleton</type>
</observer_name_here>
</observers>
</catalog_product_save_after>
</events>
Und unten ist der Code, der in methodToCall läuft():
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('TESTING 123');
$product->save();
Ausgabe Ist:
Wenn das Ereignis catalog_product_save_after ist gefeuert. Der Code geschrieben in methodToCall() feuern die catalog_product_save_after wieder. Und entsprechend Magento EDA-System methodToCall() erneut aufgerufen, die die catalog_product_save_after noch einmal auslöst. So blieb das System in einer Reihe von Feuern und hörte das gleiche Ereignis ab.
Meine Fragen:
- Wie diese Situation zu vermeiden?
- Gibt es eine Möglichkeit zu Magento Event Dispatch Funktionalität für temporäre Zwecke (ohne Umschreiben dispatch Methode von Mage_Core_Model_Appwenn möglich) zu deaktivieren.
- So verhindern Sie Endlosschleife, wenn der Beobachter das gleiche Ereignis auslöst, das den Beobachter instanziiert. Wie im Fall oben.
Warum verwenden Sie das Ereignis catalog_product_save_before nicht? Können Sie mehr erklären, was Sie in Ihrer Methode erreichen wollen? Vielleicht können wir eine alternative Lösung anbieten, anstatt zu versuchen, Event-Versendungen zu deaktivieren. – muhammedv
@muhammedv Wenn ich 'catalog_product_save_before' benutze, passiert das gleiche. Das Problem ist das EDA-System. Was passiert, wenn der Beobachter das gleiche Ereignis auslöst? Wie verhindert man, dass das System in die Schleife gerät? – ROBIN
Wenn Sie catalog_product_save_before verwenden, rufen Sie nicht $ product-> save() auf; Es wird danach gespeichert. Holen Sie sich einfach das Produkt mit $ product = $ observer-> getEvent() -> getProduct(); in der Observer-Methode und Aufruf setName() und nicht save() aufrufen. Es wird gespeichert. Probier es aus. – muhammedv