2010-08-16 13 views
9

मेरे पर्यवेक्षक के 2 sales_order_shipment_save_before ईवेंट देख रहे हैं। ModuleA एक मैं पहले बनाया गया था और उसके बाद मैं ModuleBMagento - एक ही घटना पर 2 या अधिक पर्यवेक्षक

अब केवल ModuleB के पर्यवेक्षक कहा जाता है और नहीं ModuleA बनाया।

कृपया मुझे बताएं कि मैं इसे कैसे हल कर सकता हूं और दोनों पर्यवेक्षकों को बुलाया जाता है।

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

सादर, सौरभ

+1

कृपया अपने दो पर्यवेक्षक चश्मा (कॉन्फ़िगरेशन एक्सएमएल) पोस्ट करें, कृपया। –

+0

जोड़ा गया एक्सएमएल और PHP – Saurabh

उत्तर

14

कोई समय इस परीक्षण करने के लिए है, लेकिन पहली नजर में मैं

<shipmentsave> 

प्रत्येक मॉड्यूल के लिए अलग बनाने की कोशिश होगी। जैसे

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

और

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

यह वास्तव में समस्या है। आपके पास प्रति ईवेंट नामित पर्यवेक्षक का केवल एक उदाहरण हो सकता है। प्रत्येक पर्यवेक्षक को इसके नाम की आवश्यकता होगी। मेरा मानक मॉड्यूल नाम को पर्यवेक्षक नाम के रूप में उपयोग करना है। तो इस मामले में और । –

+0

@ एलन स्टॉर्म, आपके उत्तर के दो साल बाद, स्वीकार नहीं किया गया है, लेकिन क्या यह काम करता है? मैं एक ही मुद्दे का सामना कर रहा हूं, 2 अलग-अलग मॉड्यूल, एक ही घटना को पकड़ने की आवश्यकता है और दूसरा मॉड्यूल काम नहीं कर रहा है। लेकिन अगर मैं पहले को निष्क्रिय करता हूं तो दूसरा काम करता है। – Yaroslav

+2

यह उत्तर स्वीकार किया जाना चाहिए। चूंकि पर्यवेक्षक नाम अद्वितीय होने की आवश्यकता है, 'शिपमेंटव' और 'bshipmentsave' काम करेगा। अन्यथा, अंतिम एक्सएमएल नोड पढ़ा जाएगा, उसी नाम के साथ पिछले पर्यवेक्षकों को बस ओवरराइट करेगा। – musicliftsme

5

प्रत्येक पर्यवेक्षक कुछ एक अनन्य नाम होना चाहिए। कोड में दोनों पर्यवेक्षक का एक ही नाम है। तो प्रत्येक पर्यवेक्षक को अद्वितीय नाम दें।

0

मुझे लगता है कि आप कुछ सोच रहे हैं, आप किसी ईवेंट के लिए पर्यवेक्षक का उपयोग करके कई फ़ंक्शन कॉल कर सकते हैं। लेकिन प्रत्येक घटना पर्यवेक्षक के लिए विधि का नाम अलग होना चाहिए और इसके आईडी भी होना चाहिए।

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

आप दोनों एक्सएमएल आईडी shipmentsave और विधि salesOrderShipmentSaveBefore में देख सकते हैं एक ही है।

बस इसे बदलें और आप सब कुछ कर चुके हैं।

संबंधित मुद्दे