ฉันรู้ว่า Magento มีระบบเบ็ดเหมือนที่เรียกว่าเหตุการณ์ ใครบ้างมีรายการที่สมบูรณ์หรือสคริปต์ที่สามารถใช้เพื่อกำหนดเหตุการณ์ที่สามารถเรียก?
ฉันรู้ว่า 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
_eventPrefix
กิจกรรมรูปแบบเหตุการณ์คำขอเป้าหมายเหตุการณ์บล็อกทั่วไปที่มีประโยชน์เป็นครั้งคราวและความสำคัญของการบันทึกเพื่อค้นหาเหตุการณ์
app/code/core/Mage/Core/Model/App.php
และmage::log($eventName,null,'events.txt',true);
เป็นdispatchEvent
วิธีการ โหลดหน้าฉันพยายามสังเกต เห็นได้ชัดว่าอย่าปล่อยให้สิ่งนี้เป็นและจะย้อนกลับเมื่อ var / logs / events.txt ของคุณถูกสร้างขึ้น สกปรกใช่ เร็วใช่ :)
ทำเลือดgrep 'Mage::dispatchEvent' app/ -rsn
สิ่งนี้จะช่วยให้คุณมีรายการของเหตุการณ์เฉพาะสำหรับการติดตั้งของคุณเนื่องจากรายการของเหตุการณ์อาจแตกต่างกันไปขึ้นอยู่กับเวอร์ชั่นวีโอไอพีการปรับแต่งและการติดตั้งส่วนขยาย
sales_order_place_after
จะเกิดขึ้น Checkout/Type/Onepage.php
แต่มันก็ดูเหมือนว่าการเรียกร้องให้ไฟมันจะออกความเห็นของ
ฉันใช้นี้เป็นแผ่นโกงดีhttp://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ มันมีเหตุการณ์ทั้งหมดที่สามารถเรียกได้ใน 1.7
ฉันรู้ว่าคำถามนี้ได้รับคำตอบฉันเพียงเพิ่มวิธีของฉันที่นี่:
public static function dispatchEvent
(ln: ~ 446) ในจุดเริ่มต้นที่ฉันเพิ่ม
//Mage::log($name, null, 'events.log', true);
จากนั้นคุณเปิด var / log / events.log (~ 40kb) และดูกิจกรรมล็อตทั้งหมดในหน้านั้นเท่านั้น! :)
คำตอบได้รับการยอมรับแล้ว แต่ไม่ได้โพสต์คำตอบของฉันไว้สำหรับอนาคต:
หากคุณต้องการดูรายการกิจกรรมที่วีโอไอพีมี 3 ตัวเลือก:
1) Google เพราะมีผู้คนมากมายที่รวบรวมรายการกิจกรรมวีโอไอพี
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>
และภายใน yourmodule / Model / Observer:
public function hookToControllerActionPostDispatch($observer) {
Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}
ด้านบนจะบันทึกทุกเหตุการณ์ที่ส่ง ...
3)หากคุณมีการเข้าถึง SSH คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อรับภาพรวมของกิจกรรมทั้งหมด (และไฟล์ของพวกเขาที่พวกเขาถูกส่งไป):
cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/
controller_action_predispatch
controller_front_init_before
2) วิธีการนี้จะไม่บันทึกทุกเหตุการณ์ที่ส่งไปนี่เป็นส่วนที่พิมพ์ผิดหรือไม่สมบูรณ์หรือไม่?
ฉันใช้ Magento Developer Toolbar ที่มีคุณสมบัติที่ดีในการแสดงกิจกรรมที่สามารถสังเกตได้ในหน้าที่โหลด
ที่นี่คุณสามารถดูเหตุการณ์ที่มีอยู่ได้มากที่สุด: http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
ฉันได้ทำ grep ในโมดูล Mage หลักของ Magento และปฏิบัติตามรายการ
รายการครบถ้วนสมบูรณ์ของเหตุการณ์วีโอไอพี
PS ตามที่ระบุไว้อาจมีเหตุการณ์ที่อยู่ภายในฟังก์ชันที่เลิกใช้ของ Magento ดังนั้นให้ตรวจสอบไฟล์และการอ้างอิงบรรทัดก่อนการใช้งาน
เปิดรับข้อเสนอแนะ!
grep "::dispatchEvent" -R * | sort -u
grep "eventPrefix" -R * | sort -u
คำสั่ง grep ที่แสดงรายการก่อนหน้านี้จะแสดงผลซ้ำ (มาก) และไม่ครอบคลุมรายการคำนำหน้าเหตุการณ์ที่จะต้องเข้าใจชื่อเหตุการณ์ที่สร้างขึ้นแบบไดนามิก คำสั่งเหล่านี้แสดงทั้งสองรายการด้วยค่าที่ไม่ซ้ำกันเท่านั้น คุณสามารถเพิ่มแฟล็ก -n เหมือนกับคำตอบ grep อื่น ๆ และรับหมายเลขบรรทัดที่ฉันคิด แต่คำถามไม่ได้ถามว่าพวกเขาอยู่ที่ไหนในรหัส ~ _ ~
มีแผ่นโกงที่นี่ด้วยhttp://mikebywaters.wordpress.com/2012/07/23/magento-event-observer-list/
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
คุณสามารถดูรายการเหตุการณ์ผู้สังเกตการณ์ได้ที่นี่
อ้างอิงแผ่นโกงเหล่านี้
https://www.nicksays.co.uk/magento-events-cheat-sheet-1-8/ http://rabee.me/codes/magento/cheatsheet/1.9/
มันจะเป็นประโยชน์กับคุณ
คุณสามารถค้นหารายการแบ็กเอนด์ + เหตุการณ์ส่วนหน้าทั้งหมดได้ในลิงค์เดียว
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
หากใครบางคนต้องการรายการที่อัปเดตฉันพยายามที่จะทำให้เป็นปัจจุบัน:
https://gist.github.com/digitalpianism/d8157c6b492238af2ed7809e5e3a134e
คุณสามารถค้นหากิจกรรม magento-1x ทั้งหมดโดยติดตาม url https://magento2.atlassian.net/wiki/display/m1wiki/Magento+1.x+Events+Reference