महत्वपूर्ण नोट: यह उत्तर ओसी> 2.0.x.x और < 2.2.x.x पर लागू होता है।
घटना प्रणाली इस तरह काम करता है:
- OpenCart डेटाबेस से सभी पंजीकृत ईवेंट हैंडलर्स के साथ एक सूची लोड करता है। यह index.php फ़ाइल के अंत में होता है।
- फिर ईवेंट हैंडलर $ ईवेंट ऑब्जेक्ट में पंजीकृत हैं, जो इवेंट क्लास (सिस्टम/इंजन/event.php)
- का उदाहरण है, फिर $ event-> ट्रिगर() विधि अलग से कॉल की जा रही है सिस्टम के कुछ हिस्सों।ट्रिगर विधि एक ईवेंट नाम को पैरामीटर के रूप में स्वीकार करती है और इस ईवेंट नाम के लिए पंजीकृत सभी ईवेंट हैंडलर निष्पादित किए जा रहे हैं।
आप इवेंट हैंडलर पंजीकृत करने या रनटाइम पर ईवेंट ट्रिगर करने के लिए $ ईवेंट ऑब्जेक्ट का उपयोग कर सकते हैं, लेकिन इसे केवल विशेष मामलों में ही करें। ध्यान रखें कि आपको $ ईवेंट के माध्यम से $ ईवेंट ऑब्जेक्ट तक पहुंचने की अधिक संभावना होगी, न कि ईवेंट और $ ईवेंट (जहां आपको इसकी आवश्यकता है) के आधार पर।
अक्सर, आपको एक्सटेंशन/ईवेंट मॉडल का उपयोग करके केवल एक बार डीबी तालिका में अपने ईवेंट हैंडलर को पंजीकृत करने की आवश्यकता होगी। आप इसे अपने इंस्टॉल() अपने व्यवस्थापक नियंत्रक की विधि में कर सकते हैं, उदाहरण के लिए। कुछ इस तरह:
public function install() {
$this->load->model('extension/event');
$this->model_extension_event->addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete');
$this->model_extension_event->addEvent('mymodule', 'post.customer.add', 'module/mymodule/on_customer_add');
}
ईवेंट हैंडलर्स विधि addEvent() के तीसरे पैरामीटर हैं और वे एक मानक मार्ग के रूप में कर रहे हैं।
आप यहां इवेंट सिस्टम के बारे में अधिक जानकारी प्राप्त कर सकते हैं: http://isenselabs.com/posts/opencart2-event-system-tutorial। यह एक ट्यूटोरियल है जो बताता है कि इवेंट सिस्टम कैसे काम करता है और इसमें सरल उदाहरण हैं जो आपको दिखाते हैं कि आपके एक्सटेंशन में इसका उपयोग कैसे करें।
इस प्रश्न पर आने वाले किसी को भी सावधानी बरतें: घटनाओं का उपयोग न करें! सभी ट्रिगर को ओपनकार्ट 2.2 से हटा दिया गया है। मुझे नहीं पता कि वे अभी भी निकट भविष्य में क्या करेंगे ... – redochka
मुझे पता लगाने में कुछ समय लगा लेकिन पुराने ट्रिगर्स को 2.2 में हटाया नहीं गया है, लेकिन एक सामान्य प्रणाली द्वारा प्रतिस्थापित किया गया है जो सभी कॉल पर कार्य करता है मॉडल (और नियंत्रक, और जो रजिस्ट्री और लोडर के माध्यम से जाते हैं)। ऐसा किया जाता है loader.php जो मॉडल ऑब्जेक्ट्स के लिए सभी कॉल को रोकता है और ट्रिगर के पहले और बाद में आग लग जाता है। घटनाओं के नाम बदल दिए गए हैं: post.order.history.add अब कैटलॉग/मॉडल/चेकआउट/ऑर्डर/एडऑर्डर हिस्ट्री/बाद (मॉडल और विधि जो इसे ट्रिगर करता है) के नाम पर रखा गया है। अधिक जानकारी: https://github.com/opencart/opencart/wiki/Events-(script-notifications)-2.2.x.x – fietserwin
घटनाक्रम 2.0 में पेश किए गए थे, * पूरी तरह से * 2.3 में बदल गया, और 3.0 में फिर से बदल गया। महान अवधारणा, बस पर्याप्त स्थिर नहीं है। –