9
votes

Magento - 2 ou plus Observateur sur le même événement

2 de mon observateur observe même sales_order_shipment_save_before code> événement. modulea code> était celui que j'ai créé d'abord, puis j'ai créé moduleb code>

seulement moduleb code> S est appelé et non modulea Code>. P>

S'il vous plaît laissez-moi savoir comment puis-je résoudre ce problème et que les deux observateurs sont appelés. p>

modulea forte> p>

<?php
class My_Bshipment_Model_Observer
{
    public function salesOrderShipmentSaveBefore(Varien_Event_Observer $observer)
    {
        $shipment = $observer->getEvent()->getShipment();
    return;
    }
}


1 commentaires

Postez vos deux spécifications d'observateurs (la configuration XML), s'il vous plaît.


3 Réponses :


14
votes

Pas de temps pour tester cela, mais au premier abord, j'essaierais de faire xxx

distinct pour chaque module. Quelque chose comme xxx

et xxx


3 commentaires

C'est exactement le problème. Vous ne pouvez avoir qu'une seule instance d'un observateur nommé par événement. Chaque observateur aura besoin de son propre nom. Mon standard consiste à utiliser le nom du module comme nom d'observateur. Donc et dans ce cas.


@Alan Storm, deux ans après votre réponse, n'est pas accepté, mais ça marche? Je suis confronté au même problème, 2 modules différents, il faut capturer le même événement et le deuxième module ne fonctionne pas. Mais si je désactive le premier, alors 2e travaille.


Cette réponse doit être acceptée. Comme les noms d'observateurs doivent être uniques, expéditeur et bistresve fonctionnera. Sinon, le dernier nœud XML lue va simplement écraser les observateurs précédents avec le même nom.



5
votes

Chaque observateur doit avoir un nom unique. Dans le code, les deux observateurs ont le même nom. Donnez un nom unique à chaque observateur.


0 commentaires

0
votes

Je pense que vous manquez quelque chose. Vous pouvez appeler autant de fonctions que vous pouvez utiliser des observateurs pour un événement. Mais pour chaque événement, le nom de la méthode de l'observateur doit être différent, ainsi que son identifiant.

<events>
    <sales_order_shipment_save_before>
        <observers>
            <shipmentsave>
                <type>singleton</type>
                <class>shipmentsave/observer</class>
                <method>salesOrderShipmentSaveBefore</method>
            </shipmentsave>
        </observers>
    </sales_order_shipment_save_before>
</events>

<events>
    <sales_order_shipment_save_before>
        <observers>
            <shipmentsave>
                <type>singleton</type>
                <class>bshipment/observer</class>
                <method>salesOrderShipmentSaveBefore</method>
            </shipmentsave>
        </observers>
    </sales_order_shipment_save_before>
</events>


0 commentaires