2010-08-16 3 views
9

2 meines Beobachters beobachten dasselbe sales_order_shipment_save_before Ereignis. ModuleA war der, den ich zum ersten Mal erstellt und dann erstellt i ModuleBMagento - 2 oder mehr Beobachter auf dasselbe Ereignis

Jetzt nur ModuleB ‚s Beobachter genannt wird und nicht ModuleA.

Bitte lassen Sie mich wissen, wie kann ich dies lösen und beide Beobachter aufgerufen werden.

ModuleA

<?xml version="1.0"?> 
<config> 
    <global> 
     <models> 
      <shipmentsave> 
       <class>My_Shipmentsave_Model</class> 
      </shipmentsave> 
     </models> 
    </global> 
    <adminhtml> 
     <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> 
    </adminhtml> 
</config> 

Observer.php

<?php 

    class My_Shipmentsave_Model_Observer 
{ 
    public function salesOrderShipmentSaveBefore(Varien_Event_Observer $observer) 
    { 
     $shipment = $observer->getEvent()->getShipment(); 
     return; 
    } 
} 

ModuleB

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
    <My_Bshipment> 
     <version>0.1.0</version> 
    </My_Bshipment> 
    </modules> 
    <admin> 
    <routers> 
     <bshipment> 
    <use>admin</use> 
    <args> 
     <module>My_Bshipment</module> 
        <frontName>bshipment</frontName> 
    </args> 
     </bshipment> 
    </routers> 
    </admin> 
    <adminhtml> 
    <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> 
    </adminhtml> 
    <global> 
    <models> 
     <bshipment> 
    <class>My_Bshipment_Model</class> 
     </bshipment> 
    </models> 
    <resources>  
     <bshipment_setup> 
     <setup> 
      <module>My_Bshipment</module> 
     </setup> 
     <connection> 
      <use>core_setup</use> 
     </connection> 
     </bshipment_setup> 
     <bshipment_write> 
     <connection> 
      <use>core_write</use> 
     </connection> 
     </bshipment_write> 
     <bshipment_read> 
     <connection> 
      <use>core_read</use> 
     </connection> 
     </bshipment_read> 
    </resources> 
    <blocks> 
     <!-- adminhtml> 
     <rewrite> 
    <shipment_view>My_Bshipment_Block_Adminhtml_Shipment_View</shipment_view> 
     </rewrite> 
     </adminhtml--> 
     <adminhtml> 
    <rewrite> 
     <sales_order_shipment_view>My_Bshipment_Block_Adminhtml_Shipment_View</sales_order_shipment_view> 
    </rewrite> 
    <rewrite> 
     <sales_shipment_grid>My_Bshipment_Block_Adminhtml_Shipment_Grid</sales_shipment_grid> 
    </rewrite> 
     </adminhtml>   
     <!-- udropship> 
     <rewrite> 
    <adminhtml_shipment_view>My_Bshipment_Block_Adminhtml_Shipment_View</adminhtml_shipment_view> 
     </rewrite> 
     </udropship--> 
    </blocks> 
    <helpers> 
     <bshipment> 
      <class>My_Bshipment_Helper</class> 
     </bshipment> 
    </helpers> 

    </global> 
</config> 

Observer.php

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

Grüße, Saurabh

+1

Veröffentlichen Sie bitte Ihre zwei Beobachterspezifikationen (die Konfigurations-XML). –

+0

Hinzugefügt xml und php – Saurabh

Antwort

14

Keine Zeit, dies zu testen, aber auf den ersten Blick würde ich für jedes Modul

<shipmentsave> 

verschiedene versuchen zu machen. So etwas wie

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

und

<observers> 
     <bshipmentsave> 
     <type>singleton</type> 
     <class>bshipment/observer</class> 
     <method>salesOrderShipmentSaveBefore</method> 
     </bshipmentsave> 
    </observers> 
+0

Dies ist genau das Problem. Sie können nur eine Instanz eines benannten Beobachters pro Ereignis haben. Jeder Beobachter benötigt seinen eigenen Namen. Mein Standard ist es, den Modulnamen als den Namen des Beobachters zu verwenden. Also und in diesem Fall. –

+0

@Alan Sturm, zwei Jahre nach Ihrer Antwort, wird nicht akzeptiert, aber funktioniert es? Ich habe das gleiche Problem, 2 verschiedene Module, müssen das gleiche Ereignis erfassen und das zweite Modul funktioniert nicht. Aber wenn ich den ersten deaktiviere, dann funktioniert 2.. – Yaroslav

+2

Diese Antwort sollte akzeptiert werden. Da die Namen von Beobachtern eindeutig sein müssen, funktionieren 'shipmentsave' und' bshipmentsave'. Andernfalls überschreibt der letzte gelesene XML-Knoten einfach die vorherigen Beobachter mit dem gleichen Namen. – musicliftsme

5

Jeder Beobachter sollte einen eindeutigen Namen haben. Im Code haben beide Beobachter den gleichen Namen. Geben Sie jedem Beobachter einen eindeutigen Namen.

0

Ich denke, Sie fehlen einige denken, Sie können viele Funktionen mit Beobachter für ein Ereignis aufrufen. Aber für jeden Event sollte der Name der Observer-Methode unterschiedlich sein und auch seine ID.

<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> 

Sie können in beide sehen die xml id shipmentsave und Methode salesOrderShipmentSaveBefore ist gleich.

Ändern Sie das einfach und Sie sind fertig.