2014-10-17 20 views
10

मैंने ओपनकार्ट ट्रिगर्स के बारे में बहुत कुछ खोजा है लेकिन मुझे एक उचित उदाहरण नहीं मिला है। ओपनकार्ट 2.0 में ऐसे ट्रिगर होते हैं जिन पर डेवलपर फ़ंक्शन को हुक कर सकता है और मुझे लगता है कि वर्डप्रेस एक्शन और फ़िल्टर जैसे कुछ ऐसा लगता है।हम ओपनकार्ट घटनाओं का उपयोग कैसे कर सकते हैं?

catalog/model/checkout/order.php 

में उदाहरण के लिए वहाँ एक ट्रिगर है $this->event->trigger('post.order.history.add', $order_id)

कोई मेरी मदद कर सकते ऊपर ट्रिगर पर मेरे समारोह हुक के लिए?

+2

इस प्रश्न पर आने वाले किसी को भी सावधानी बरतें: घटनाओं का उपयोग न करें! सभी ट्रिगर को ओपनकार्ट 2.2 से हटा दिया गया है। मुझे नहीं पता कि वे अभी भी निकट भविष्य में क्या करेंगे ... – redochka

+4

मुझे पता लगाने में कुछ समय लगा लेकिन पुराने ट्रिगर्स को 2.2 में हटाया नहीं गया है, लेकिन एक सामान्य प्रणाली द्वारा प्रतिस्थापित किया गया है जो सभी कॉल पर कार्य करता है मॉडल (और नियंत्रक, और जो रजिस्ट्री और लोडर के माध्यम से जाते हैं)। ऐसा किया जाता है loader.php जो मॉडल ऑब्जेक्ट्स के लिए सभी कॉल को रोकता है और ट्रिगर के पहले और बाद में आग लग जाता है। घटनाओं के नाम बदल दिए गए हैं: post.order.history.add अब कैटलॉग/मॉडल/चेकआउट/ऑर्डर/एडऑर्डर हिस्ट्री/बाद (मॉडल और विधि जो इसे ट्रिगर करता है) के नाम पर रखा गया है। अधिक जानकारी: https://github.com/opencart/opencart/wiki/Events-(script-notifications)-2.2.x.x – fietserwin

+0

घटनाक्रम 2.0 में पेश किए गए थे, * पूरी तरह से * 2.3 में बदल गया, और 3.0 में फिर से बदल गया। महान अवधारणा, बस पर्याप्त स्थिर नहीं है। –

उत्तर

5

महत्वपूर्ण नोट: यह उत्तर ओसी> 2.0.x.x और < 2.2.x.x पर लागू होता है।

समस्या यहाँ एक गलत शब्द का इस्तेमाल किया जा रहा है (और के लिए खोज) - सही आप के लिए खोज की जानी चाहिए घटना है, और दुर्भाग्य से से यह व्युत्पन्न घटना श्रोता और ट्रिगर घटना (, उन लोगों की तलाश करने की कोशिश करते समय भाग्य नहीं था और 2.0 के लिए प्रलेखन अभी भी गायब है)।

अब मेरा मानना ​​है कि पूरी पृष्ठभूमि और अधिक समझा जा सकता है, खासकर यदि आप अन्य चौखटे से घटनाओं (शायद jQuery?) के बारे में कुछ ज्ञान है, लेकिन यहाँ बस एक त्वरित कैसे घटनाओं के साथ काम करने के लिए (ओसी 2.0 में) गाइड है :

  • पहले हम, एक घटना श्रोता रजिस्टर करने की आवश्यकता इस तरह:

    $this->event->register('post.order.history.add', 'checkout/order/send_email');

  • कुछ स्थानों पर एक घटना टीआर है iggered, उदा।

    $this->event->trigger('pre.order.history.add', $order_id);

    और

    $this->event->trigger('post.order.history.add', $order_id);

  • अगर घटना श्रोता (द्वारा यह के नाम post.order.history.add पहचान) दर्ज किया गया था यह ट्रिगर

पर सक्रिय किया जाएगा अधिक जानकारी या के लिए अपने आप को समझने के लिए आपकोपर एक नज़र डालें 10 (अभी के साथ काम करने के लिए और कुछ नहीं है)।

+0

इस तरह की उपयोगी जानकारी के लिए बहुत बहुत धन्यवाद और हाँ ईवेंट श्रोता और ट्रिगर ईवेंट सही शब्द हैं :) – Adnan

+0

आपका स्वागत है । – shadyyx

+0

ओपी के जवाब में टिप्पणी # 2 देखें; यह समाधान अब सही नहीं है। अधिसूचना के लिए –

5

महत्वपूर्ण नोट: यह उत्तर ओसी> 2.0.x.x और < 2.2.x.x पर लागू होता है।

घटना प्रणाली इस तरह काम करता है:

  1. OpenCart डेटाबेस से सभी पंजीकृत ईवेंट हैंडलर्स के साथ एक सूची लोड करता है। यह index.php फ़ाइल के अंत में होता है।
  2. फिर ईवेंट हैंडलर $ ईवेंट ऑब्जेक्ट में पंजीकृत हैं, जो इवेंट क्लास (सिस्टम/इंजन/event.php)
  3. का उदाहरण है, फिर $ 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। यह एक ट्यूटोरियल है जो बताता है कि इवेंट सिस्टम कैसे काम करता है और इसमें सरल उदाहरण हैं जो आपको दिखाते हैं कि आपके एक्सटेंशन में इसका उपयोग कैसे करें।

+3

बाहरी संसाधनों के लिंक को प्रोत्साहित किया जाता है, लेकिन कृपया लिंक के चारों ओर संदर्भ जोड़ें ताकि आपके साथी उपयोगकर्ताओं को कुछ पता चल जाएगा कि यह क्या है और यह क्यों है। यदि लक्षित साइट पहुंच योग्य नहीं है या स्थायी रूप से ऑफलाइन हो जाती है, तो हमेशा एक महत्वपूर्ण लिंक के सबसे प्रासंगिक भाग को उद्धृत करें। http://stackoverflow.com/help/how-to-answer – Eeji

+0

ठीक है, आवश्यक यहां हैं। मैं लिंक किए गए पेज से यहां सामग्री की प्रतिलिपि बनाने में 10 या अधिक मिनट खर्च नहीं कर रहा हूं। – raxbg

+0

ओपी के जवाब में टिप्पणी # 2 देखें; यह समाधान अब सही नहीं है। –

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