2010-08-16 15 views
9

Benim gözlemcim sales_order_shipment_save_before olayına bakıyor. ModuleA i ilk yaratılan biriydi ve sonra benMagento - Aynı etkinlikteki 2 ya da daha fazla gözlemci

Şimdi sadece ModuleB 'ın gözlemci olarak adlandırılır

değil ModuleAModuleB yarattı.

Lütfen bunu nasıl çözebilirim ve her iki gözlemciyi arayalım.

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

Selamlar, Saurabh

+1

İki gözlemci özelliklerinizi (yapılandırma XML'i) gönderin, lütfen. –

+0

Eklendi xml ve php – Saurabh

cevap

14

Bunu test etmek zaman yok, ama ilk bakışta ben her modül için

<shipmentsave> 

ayrı yapım deneyin ediyorum.

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

ve

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

Bu tam olarak sorun. Etkinlik başına yalnızca adlandırılmış bir gözlemcinin bir örneğini alabilirsiniz. Her gözlemci kendi adını gerektirecektir. Benim standardım modül adını gözlemci adı olarak kullanmaktır. Bu durumda ve . –

+0

@Alan Storm, cevabınızdan iki yıl sonra kabul edilmedi, ancak işe yarıyor mu? Aynı konuyla yüzleşiyorum, 2 farklı modül, aynı olayı yakalamam gerekiyor ve ikinci modül çalışmıyor. Ama eğer ilkini devre dışı bırakırsam, o zaman 2. çalışır. – Yaroslav

+2

Bu cevap kabul edilmelidir. Gözlemci isimlerinin benzersiz olması gerektiğinden, 'shipmentsave' ve' bshipmentsave' çalışacaktır. Aksi takdirde, okunan son XML düğümü, önceki gözlemcilerin aynı adla üzerine yazılmasına yol açar. – musicliftsme

5

Her gözlemci gibi bir şey benzersiz bir ad olmalıdır. Kodda her iki gözlemci aynı ada sahip. Her bir gözlemciye benzersiz bir isim verin.

0

Sanırım bazılarını özlüyorsunuz, bir etkinlik için gözlemci kullanarak birçok işlevi arayabilirsiniz. Ancak her bir Olay Gözlemcisi Yöntemi adı için Farklı ve aynı zamanda onun Kimliği olmalıdır.

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

Sen xml id shipmentsave ve yöntem hem salesOrderShipmentSaveBefore görebilirsiniz aynıdır.

Sadece bunu değiştirin ve işiniz bitti.

İlgili konular