मुझे Magento की घटनाओं की पूरी सूची कहां मिल सकती है?


94

मुझे पता है कि मैगेंटो में एक हुक जैसी प्रणाली है, जिसे ईवेंट कहा जाता है। क्या किसी के पास एक पूरी सूची या एक स्क्रिप्ट है जिसका उपयोग यह निर्धारित करने के लिए किया जा सकता है कि कौन सी घटनाओं को कहा जा सकता है?


4
मैं इसे एक अच्छा धोखा पत्र nicksays.co.uk/magento-events-cheat-sheet-1-7 के
डेरिक न्योमो

1
@DerrikNyomo - आपको उस जानकारी के सारांश के साथ उत्तर के रूप में पोस्ट करना चाहिए जो वह प्रदान करता है। :-)
बेंचमार्क

1
घटनाओं के लिए चीट शीट वास्तव में एक परेशानी के रूप में अधिक हैं, क्योंकि वे आपको एक गलत अर्थ देते हैं कि 'मुझे जो घटना चाहिए वह मौजूद नहीं है' और आप कोडिंग के घंटों को बर्बाद कर सकते हैं, एक ऐसी घटना को याद कर सकते हैं जिसका उपयोग किया जा सकता था (बहुत सारे के बाद से गतिशील रूप से बनाए गए) मैंने इस प्रश्न का उत्तर पोस्ट किया है: लिंक और मेरा उत्तर भी इस प्रश्न से संबंधित है। यह आपको पूरी 'सूची' नहीं देता है, लेकिन यह आपको उस कार्य / पृष्ठ लोड की घटनाओं की पूरी सूची देता है, जिस पर आप रुचि रखते हैं।
ProxiBlue

जवाबों:


102

सभी Magento की घटनाओं की एक सूची नहीं है, क्योंकि अधिकांश घटनाओं को गतिशील रूप से नाम दिया गया है।

यदि आप मुझसे पूछें, तो इन प्रमुख घटनाओं (और परिणामों) को जानना एक अच्छा प्रारंभिक बिंदु है (निक से सूची के बगल में):

Mage_Core_Model_Abstract से विस्तारित प्रत्येक वस्तु लोडिंग, बचत और हटाने के आसपास बहुत सी घटनाओं को भेजती है:

app/code/core/Mage/Core/Model/Abstract.php:255
Mage::dispatchEvent($this->_eventPrefix.'_load_before', $params);
// e.g. sales_order_load_before, checkout_cart_load_before

उदाहरण के लिए, चेक को जोड़ने के लिए, वस्तु लोड होने के बाद

app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after

सहेजे जाने से पहले ऑब्जेक्ट में अतिरिक्त डेटा जोड़ना

app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before

"माता-पिता" को बचाने के बाद अन्य मॉडलों को बचाने के लिए

app/code/core/Mage/Core/Model/Abstract.php:466  
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after

मॉडल को हटाने से पहले सफाई करें

app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before

मॉडल को हटाने से पहले सफाई करें - या शायद बाद में? आप यहाँ अभी भी लेन-देन में हैं!

app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after

यदि आप सुनिश्चित करना चाहते हैं कि इकाई हटा दी गई है

app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after

Mage_Core_Model_Resource_Db_Collection_Abstract से विस्तारित संग्रह में दो सामान्य घटनाएं भी हैं:

उदाहरण के लिए: संग्रह को लोड करने के लिए SQL को बदलना:

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:588
Mage::dispatchEvent($this->_eventPrefix.'_load_before', array(
    $this->_eventObject => $this
));
// e.g. sales_order_status_history_collection_load_before

उदाहरण के लिए: ऑब्जेक्ट में अतिरिक्त डेटा जोड़ने के लिए:

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:637
Mage::dispatchEvent($this->_eventPrefix.'_load_after', array(
    $this->_eventObject => $this
));
// e.g. sales_order_shipment_collection_load_after

4
बहुत अच्छा जवाब; कुछ के लिए उम्मीद करना हम विकि में टक कर सकते हैं। के महत्व को _eventPrefixमॉडल की घटनाओं के लिए, लक्षित अनुरोध घटनाओं, कभी कभी-उपयोगी सामान्य ब्लॉक घटनाओं, और घटनाओं को खोजने के लिए प्रवेश के महत्व
benmarks

1
अति उत्कृष्ट। मैं यह नोट करना चाहता था कि Magento 2 में उन्हें वास्तव में यह सुनिश्चित करने की आवश्यकता है कि सभी मुख्य वर्गों में एक परिभाषित घटना उपसर्ग है। मेरे पास वास्तव में केवल घटना उपसर्ग को परिभाषित करने के लिए कक्षाएं फिर से लिखी गई हैं ताकि मैं स्पष्ट रूप से बचत / लोड घटनाओं में हुक कर सकूं। हम्म। वास्तव में मुझे लगता है कि मैं खुद Magento के 2 स्रोत की जाँच करूँगा।
टिम रेनॉल्ड्स

3
दृष्टिकोण मैं आमतौर पर लेने, एक त्वरित संपादित करें / बचाने / पर वापस लौटने app/code/core/Mage/Core/Model/App.phpऔर mage::log($eventName,null,'events.txt',true);करने के लिए dispatchEventविधि। वह पृष्ठ लोड करें जिसका मैं अवलोकन करने का प्रयास कर रहा हूं। स्पष्ट रूप से इसे वैसा न छोड़ें जैसा कि आपके var / लॉग / event.txt के बन जाने के बाद वापस मिलता है। गंदा, हाँ। जल्दी, हाँ। :)
B00MER

2
अच्छा, यदि आप चाहते हैं कि आपका पर्यवेक्षक एक पृष्ठ पर हो। लेकिन सावधान रहें, ऐसी घटनाएं हैं जिन्हें भेजा जाना चाहिए, लेकिन हो नहीं सकता। एक आदेश या भुगतान घटना है जिसे फेंक नहीं दिया जाता है, जब पेपाल के साथ भुगतान किया जाता है ...
फेबियन बलेचस्मिड

क्या Magento @FabianBlechschmidt
किंग्शुक डेब

48

खूनी करें grep 'Mage::dispatchEvent' app/ -rsnयह आपको आपकी स्थापना के लिए विशिष्ट घटनाओं की एक सूची प्रदान करेगा क्योंकि घटनाओं की सूची Magento के संस्करण, अनुकूलन और स्थापित एक्सटेंशन के आधार पर भिन्न हो सकती है।


2
यह सबसे अच्छी सलाह है, इसमें 3 पार्टी मॉड्यूल इवेंट भी शामिल होंगे। आमतौर पर जब मैं जानना चाहता हूं कि मैं किन घटनाओं के लिए विशेष पेज के लिए हुक कर सकता हूं, तो मैं एप लॉग करता हूं: डिस्पैच पैरामीटर।
पितर दज़मबाज़ोव

1
Grep आपको बुरी जानकारी भी देगा: उदाहरण के लिए, यह दावा करता है कि sales_order_place_afterऐसा होगा, लेकिन ऐसा लगता है कि आग लगने की कॉल के बारे में टिप्पणी की गई है Checkout/Type/Onepage.php
कोजीरो

यह एक खराब जवाब है क्योंकि यह केवल उपलब्ध घटनाओं के एक अंश को उठाएगा क्योंकि यह सभी गतिशील रूप से उत्पन्न घटनाओं को पूरी तरह से याद करता है। @PetarDzhambazov डिस्पैचर से प्रवेश करने के लिए अच्छी सलाह और फिर लोड पृष्ठों को आप में रुचि रखते हैं देता है अब तक का सबसे अच्छा जवाब FabianBlechschmidt द्वारा दिए गए स्वीकार किए जाते हैं जवाब है।
डोम

26

मैं इसे एक अच्छा धोखा पत्र के रूप में उपयोग करता हूं http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ । इसमें सभी घटनाएँ हैं जिन्हें 1.7 में बुलाया जा सकता है।


4
चूंकि आपने पहले ही सामग्री को लिंक करने का एक अच्छा काम किया है, इसलिए सबसे अच्छा यह भी है कि सामग्री यहां उपलब्ध कराए जाने की स्थिति में निक कहते हैं "स्क्रू
मैगेंटो

3
मैं इस सूची का प्रशंसक नहीं हूं, क्योंकि 1: यह अधूरा है, 2: मैगेंटो के बारे में अन्य 1231 ब्लॉग हैं "मैगेंटो में घटनाएँ" (मैगेंटो पर कुछ विकि पेज)।
फ़्लोरिनसेलइस

@benmark का अनुमान है कि इस समय क्या हुआ ...
toon81

9

मुझे पता है कि इस सवाल का जवाब दिया गया है, मैं यहाँ अपना रास्ता जोड़ता हूँ:

  • मैं वह पृष्ठ तैयार करता हूं जिसे मैं अपने ब्राउज़र में देखना चाहता हूं
  • मैं ऐप / Mage.php खोलता हूं
  • के लिए public static function dispatchEvent(ln: ~ 446) भीख मांगने के काम में //Mage::log($name, null, 'events.log', true);
  • वह लाइन,
  • ताज़ा पृष्ठ जो मैं पर हूँ
  • उस लाइन पर फिर से टिप्पणी करें

फिर आप var / log / event.log (~ 40kb) खोलें और उस पेज पर पूरी बहुत सारी घटनाओं को देखें! :)


2
यह कुछ घटनाओं को याद करेगा जो स्टोर कॉन्फिग में विलय होने से पहले निकाल दी जाती हैं।
10

6

उत्तर को पहले ही स्वीकार कर लिया गया है, लेकिन बीमार भविष्य के लिए वैसे भी मेरा उत्तर दे सकते हैं:

यदि आप उन घटनाओं की सूची देखना चाहते हैं जो Magento के पास आपके पास 3 विकल्प हैं:

1) Google इसके लिए, बहुत सारे लोग हैं जिन्होंने Magento की घटनाओं की एक सूची तैयार की है

2) एक मॉड्यूल बनाएं controller_action_predispatchजो उस घटना पर हुक करता है जो वह घटना है जिसे किसी अन्य घटना से पहले बुलाया जाता है। इस मॉड्यूल के अंदर आप कुछ ईवेंट भेज सकते हैं जो भेजे गए हैं:

Config.xml पर निम्न जोड़ें

<events>
    <controller_action_postdispatch>
        <observers>
            <controller_action_after>
                <class>yourmodule/observer</class>
                <method>hookToControllerActionPostDispatch</method>
            </controller_action_after>
        </observers>
    </controller_action_postdispatch>
</events>

और आपके अंदर / मॉडल / प्रेक्षक:

public function hookToControllerActionPostDispatch($observer) {
    Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}

ऊपर भेजे जाने वाले प्रत्येक ईवेंट को लॉग करेगा ...

3) यदि आपके पास SSH का उपयोग है, तो आप सभी घटनाओं का अवलोकन प्राप्त करने के लिए निम्न कमांड को चला सकते हैं (और उनकी फाइलें जहाँ वे भेजे जाते हैं):

cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/

1
क्षमा करें - जबकि # 3 अच्छा है, आपके उत्तर से 1 & 2 में जानकारी वास्तव में सही नहीं है। 1) कुछ घटनाओं को पहले controller_action_predispatch, विशेष रूप से निकाल दिया गया है controller_front_init_before। 2) यह दृष्टिकोण बस प्रेषण की गई हर घटना को लॉग नहीं करेगा , क्या यह एक टाइपो या अपूर्ण अनुभाग है?
बेंचमार्क

इसे "सबसे";)
केनी

2
क्षमा करें, अभी भी बहुत सटीक नहीं है :-( - प्रेषण (पूर्वावलोकन, लेआउट, प्रतिपादन, साथ ही मॉडल और संग्रह भार) के लिए कई और अधिक घटनाएँ हैं ...
बेंचमार्क

"कुछ घटनाओं" के उत्तर को अपडेट किया।
केनी

4

मैं Magento डेवलपर टूलबार का उपयोग कर रहा हूं जिसमें उन घटनाओं को प्रदर्शित करने की अच्छी सुविधा है जो लोड किए गए पृष्ठ पर देखे जा सकते हैं।



4

मैंने Magento के कोर मैज मॉड्यूल पर एक grep किया है, और एक सूची का अनुपालन किया है,

Magento की घटनाओं की व्यापक सूची

PS जैसा कि बताया गया है, ऐसी घटनाएँ हो सकती हैं जो Magento के पदावनत कार्यों के अंदर हैं, इसलिए कार्यान्वयन से पहले फ़ाइल और लाइन संदर्भ की जाँच करें।

सुझाव के लिए खोलें!


1
आप अभी भी सभी उपवर्गित जादू की घटनाओं को याद कर रहे हैं। के लिए grepped नहीं किया जा सकता है।
19/07 बजे बेले

में के रूप में जादू की घटनाओं? जो गतिशील हैं? क्या आप plz @benmark
huzefam


@ चिह्न मुझे सहमत हैं, मुझे नहीं लगता कि हमें इसके लिए स्पष्ट रूप से एक सूची तैयार करने की आवश्यकता है
huzefam

इसलिए मेरी टिप्पणी, जिसे "
एग्जॉस्ट

4
grep "::dispatchEvent" -R * | sort -u

grep "eventPrefix" -R * | sort -u

पिछले सूचीबद्ध grep कमांड डुप्लिकेट (बहुत) रेंडर करेगा और यह घटना उपसर्गों की सूची को कवर नहीं करता है जिन्हें गतिशील रूप से उत्पन्न इवेंट नामों को समझने के लिए आवश्यक होगा। ये आदेश केवल अनन्य मानों के साथ दोनों सूचियों को प्रस्तुत करते हैं। आप अन्य grep उत्तर की तरह एन-फ्लैग जोड़ सकते हैं और मुझे लगता है कि लाइन नंबर प्राप्त कर सकते हैं। लेकिन सवाल यह नहीं पूछा कि कोड में वे सब कहाँ थे। ~ _ ~


हमारे यहाँ ऐसा ही उत्तर है। @TimBezhashvyly का जवाब देखें
राजीव के टॉमी

.... जैसा कि पिछले सूचीबद्ध grep कमांड डुप्लिकेट (बहुत) प्रस्तुत करेगा और यह गतिशील रूप से उत्पन्न ईवेंट नामों को समझने के लिए आवश्यक इवेंट उपसर्गों की सूची को कवर नहीं करेगा। ये आदेश केवल अनन्य मानों के साथ दोनों सूचियों को प्रस्तुत करते हैं। आप अन्य grep उत्तर की तरह एन-फ्लैग जोड़ सकते हैं और लाइन नंबर को मान सकते हैं। लेकिन सवाल यह नहीं पूछा कि कोड में वे सब कहाँ थे।
mprototype

क्या आप इस विवरण को अपने उत्तर में जोड़ सकते हैं। तब आपका जवाब सुपर कूल हो जाता है ... (तब तक उठने के लिए तैयार हूं) :-)
राजीव के टॉमी

क्या उससे मदद हुई?
mprototype

हाँ। उसके लिए +1। :)
राजीव के टॉमी

3

1
लोन लिंक को एक खराब उत्तर माना जाता है (देखें faq ) क्योंकि यह अपने आप से निरर्थक है और लक्ष्य संसाधन भविष्य में जीवित रहने की गारंटी नहीं है । यहां उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
j0k



2

आप सिंगल लिंक पर बैकएंड + फ्रंटएंड घटनाओं की सभी सूची पा सकते हैं

http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events


1
यह पूर्ण संसाधन नहीं है, क्योंकि पूर्ण संसाधन नहीं है।
benmarks

डुप्लिकेट उत्तर ... अपनी आँखें 200px ऊपर ले जाएँ;)
7ochem


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.