ฉันจะหารายการกิจกรรมวีโอไอพีที่สมบูรณ์ได้ที่ไหน


94

ฉันรู้ว่า Magento มีระบบเบ็ดเหมือนที่เรียกว่าเหตุการณ์ ใครบ้างมีรายการที่สมบูรณ์หรือสคริปต์ที่สามารถใช้เพื่อกำหนดเหตุการณ์ที่สามารถเรียก?


4
ฉันใช้สิ่งนี้เป็นแผ่นโกงที่ดีnicksays.co.uk/magento-events-cheat-sheet-1-7
Derrik Nyomo

1
@DerrikNyomo - คุณควรโพสต์สิ่งนั้นเป็นคำตอบพร้อมกับสรุปข้อมูลที่ให้ :-)
เครื่องหมายที่

1
แผ่นงานสำหรับเหตุการณ์จริง ๆ แล้วเป็นเรื่องที่ยุ่งยากมากกว่าเพราะมันทำให้คุณเข้าใจผิดว่า 'เหตุการณ์ที่ฉันต้องการไม่มีอยู่' และคุณอาจเสียเวลาในการเขียนโปรแกรมเนื่องจากพลาดเหตุการณ์ที่อาจถูกนำมาใช้ ถูกสร้างขึ้นแบบไดนามิก) ฉันโพสต์คำตอบสำหรับคำถามนี้: ลิงก์และคำตอบของฉันเกี่ยวข้องกับคำถามนี้ มันไม่ได้ทำให้คุณมี 'รายการ' ที่สมบูรณ์ แต่จะให้รายการที่สมบูรณ์ของกิจกรรมสำหรับการดำเนินการ / การโหลดหน้าเว็บที่คุณสนใจในการเชื่อมต่อ
ProxiBlue

คำตอบ:


102

ไม่มีรายการกิจกรรมวีโอไอพีทั้งหมดเนื่องจากกิจกรรมส่วนใหญ่มีการตั้งชื่อแบบไดนามิก

หากคุณถามฉันการรู้เหตุการณ์สำคัญเหล่านี้ (และผลที่ตามมา) เป็นจุดเริ่มต้นที่ดี (ข้างรายการจากนิค):

ทุกวัตถุที่ขยายจาก 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กิจกรรมรูปแบบเหตุการณ์คำขอเป้าหมายเหตุการณ์บล็อกทั่วไปที่มีประโยชน์เป็นครั้งคราวและความสำคัญของการบันทึกเพื่อค้นหาเหตุการณ์
เครื่องหมาย

1
ยอดเยี่ยม ฉันต้องการที่จะทราบว่าใน Magento 2 พวกเขาต้องการให้แน่ใจว่าชั้นเรียนหลักทั้งหมดมีคำนำหน้าเหตุการณ์ที่กำหนดไว้ ฉันมีคลาสที่เขียนขึ้นใหม่จริงๆเพื่อกำหนดคำนำหน้าเหตุการณ์เพื่อให้ฉันสามารถขอเข้าร่วมกิจกรรมบันทึก / โหลดได้อย่างหมดจด อืมมม ที่จริงฉันคิดว่าฉันจะไปตรวจสอบแหล่งที่มาของวีโอไอพี 2 ด้วยตัวเอง
Tim Reynolds

3
วิธีที่ฉันมักจะใช้คือการแก้ไข / บันทึก / เปลี่ยนกลับอย่างรวดเร็วapp/code/core/Mage/Core/Model/App.phpและmage::log($eventName,null,'events.txt',true);เป็นdispatchEventวิธีการ โหลดหน้าฉันพยายามสังเกต เห็นได้ชัดว่าอย่าปล่อยให้สิ่งนี้เป็นและจะย้อนกลับเมื่อ var / logs / events.txt ของคุณถูกสร้างขึ้น สกปรกใช่ เร็วใช่ :)
B00MER

2
ดีถ้าคุณต้องการให้ผู้สังเกตการณ์อยู่ในหน้าเดียว แต่ระวังให้ดีมีกิจกรรมที่ควรส่ง แต่อาจจะไม่ มีคำสั่งซื้อหรือการชำระเงินเหตุการณ์ซึ่งไม่ได้โยนเมื่อ payed กับ PayPal คือ ...
Fabian Blechschmidt

มีเหตุการณ์ใดถูกไล่ออกหลังจากสร้างการจัดส่งใน magento @FabianBlechschmidt
Kingshuk Deb

48

ทำเลือดgrep 'Mage::dispatchEvent' app/ -rsnสิ่งนี้จะช่วยให้คุณมีรายการของเหตุการณ์เฉพาะสำหรับการติดตั้งของคุณเนื่องจากรายการของเหตุการณ์อาจแตกต่างกันไปขึ้นอยู่กับเวอร์ชั่นวีโอไอพีการปรับแต่งและการติดตั้งส่วนขยาย


2
นั่นคือคำแนะนำที่ดีที่สุดมันจะรวมถึงเหตุการณ์โมดูลบุคคลที่สามเช่นกัน โดยปกติเมื่อฉันต้องการทราบว่ากิจกรรมใดที่ฉันสามารถขอไปที่หน้าใดหน้าหนึ่งฉันเข้าสู่ระบบแอป: พารามิเตอร์ dispatchEvent
Petar Dzhambazov

1
grep ยังจะให้ข้อมูลที่ไม่ดี: ยกตัวอย่างเช่นมันอ้างว่าsales_order_place_afterจะเกิดขึ้น Checkout/Type/Onepage.phpแต่มันก็ดูเหมือนว่าการเรียกร้องให้ไฟมันจะออกความเห็นของ
kojiro

นี่เป็นคำตอบที่ไม่ดีเนื่องจากจะรับเพียงเสี้ยวของกิจกรรมที่มีอยู่เนื่องจากพลาดเหตุการณ์ที่สร้างขึ้นแบบไดนามิกทั้งหมด @PetarDzhambazov ให้คำแนะนำที่ดีในการเข้าสู่ระบบจากดิสแพตเชอร์แล้วโหลดหน้าเว็บที่คุณสนใจคำตอบที่ดีที่สุดคือคำตอบที่ได้รับการยอมรับจาก FabianBlechschmidt
Dom

26

ฉันใช้นี้เป็นแผ่นโกงดีhttp://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ มันมีเหตุการณ์ทั้งหมดที่สามารถเรียกได้ใน 1.7


4
เนื่องจากคุณได้ทำการเชื่อมโยงเนื้อหาได้ดีแล้วจึงควรจัดเตรียมเนื้อหาไว้ที่นี่ในกรณีที่ Nick พูดว่า "screw Magento" และลบหน้าของเขา :-)
benmarks

3
ฉันไม่ได้เป็นแฟนของรายการนี้เพราะ 1: มันไม่สมบูรณ์ 2: มีบล็อกอื่น ๆ เกี่ยวกับ Magento 1,331 บล็อกที่มี "all" กิจกรรมใน Magento (+ บางหน้า wiki บน Magento)
FlorinelChis

@ เครื่องหมายคาดเดาว่าเกิดอะไรขึ้นในเวลาเฉลี่ย ...
toon81

9

ฉันรู้ว่าคำถามนี้ได้รับคำตอบฉันเพียงเพิ่มวิธีของฉันที่นี่:

  • ฉันเตรียมหน้าเว็บที่ฉันต้องการสังเกตในเบราว์เซอร์ของฉัน
  • ฉันเปิดแอพ / Mage.php
  • สำหรับpublic static function dispatchEvent(ln: ~ 446) ในจุดเริ่มต้นที่ฉันเพิ่ม //Mage::log($name, null, 'events.log', true);
  • uncomment บรรทัดนั้น
  • รีเฟรชหน้าเว็บที่ฉันเปิดอยู่
  • แสดงความคิดเห็นอีกครั้งที่บรรทัด

จากนั้นคุณเปิด var / log / events.log (~ 40kb) และดูกิจกรรมล็อตทั้งหมดในหน้านั้นเท่านั้น! :)


2
สิ่งนี้จะพลาดบางเหตุการณ์ที่เกิดขึ้นก่อนที่จะรวมการกำหนดค่าร้านค้า
benmarks

6

คำตอบได้รับการยอมรับแล้ว แต่ไม่ได้โพสต์คำตอบของฉันไว้สำหรับอนาคต:

หากคุณต้องการดูรายการกิจกรรมที่วีโอไอพีมี 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/

1
ขออภัย - ในขณะที่ # 3 ดีข้อมูลใน 1 & 2 จากคำตอบของคุณไม่ถูกต้อง 1) มีเหตุการณ์ไม่กี่ยิงก่อนที่สะดุดตาcontroller_action_predispatch controller_front_init_before2) วิธีการนี้จะไม่บันทึกทุกเหตุการณ์ที่ส่งไปนี่เป็นส่วนที่พิมพ์ผิดหรือไม่สมบูรณ์หรือไม่?
benmarks

แก้ไขให้เป็น "มากที่สุด";)
Kenny

2
ขออภัยยังไม่ถูกต้อง :-( - มีกิจกรรมอีกมากมายที่ส่งมา (การกำหนดล่วงหน้า, เลย์เอาต์, การเรนเดอร์, รวมถึงแบบจำลองและการโหลดคอลเลกชัน) ...
คั่นหน้า

อัปเดตคำตอบสำหรับ "เหตุการณ์บางอย่าง"
Kenny

4

ฉันใช้ Magento Developer Toolbar ที่มีคุณสมบัติที่ดีในการแสดงกิจกรรมที่สามารถสังเกตได้ในหน้าที่โหลด



4

ฉันได้ทำ grep ในโมดูล Mage หลักของ Magento และปฏิบัติตามรายการ

รายการครบถ้วนสมบูรณ์ของเหตุการณ์วีโอไอพี

PS ตามที่ระบุไว้อาจมีเหตุการณ์ที่อยู่ภายในฟังก์ชันที่เลิกใช้ของ Magento ดังนั้นให้ตรวจสอบไฟล์และการอ้างอิงบรรทัดก่อนการใช้งาน

เปิดรับข้อเสนอแนะ!


1
คุณยังคงพลาดกิจกรรมเวทย์มนตร์คลาสย่อยทั้งหมด ไม่สามารถโลภได้
benmarks

เหตุการณ์เวทย์มนตร์เช่นเดียวกับใน? คนที่เป็นแบบไดนามิก? คุณช่วยอธิบายรายละเอียดเพิ่มเติมได้ที่ @benmarks
huzefam


@ เครื่องหมายฉันเห็นด้วยฉันไม่คิดว่าเราจำเป็นต้องจัดทำรายการอย่างชัดเจนสำหรับเรื่องนี้
huzefam

ดังนั้นความคิดเห็นของฉันซึ่งถูกเสนอขึ้นอยู่กับการใช้ "หมดจด"
benmarks

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

grep "eventPrefix" -R * | sort -u

คำสั่ง grep ที่แสดงรายการก่อนหน้านี้จะแสดงผลซ้ำ (มาก) และไม่ครอบคลุมรายการคำนำหน้าเหตุการณ์ที่จะต้องเข้าใจชื่อเหตุการณ์ที่สร้างขึ้นแบบไดนามิก คำสั่งเหล่านี้แสดงทั้งสองรายการด้วยค่าที่ไม่ซ้ำกันเท่านั้น คุณสามารถเพิ่มแฟล็ก -n เหมือนกับคำตอบ grep อื่น ๆ และรับหมายเลขบรรทัดที่ฉันคิด แต่คำถามไม่ได้ถามว่าพวกเขาอยู่ที่ไหนในรหัส ~ _ ~


เรามีคำตอบที่คล้ายกันที่นี่ อ้างถึงคำตอบของ@TimBezhashvyly
Rajeev K Tomy

การเรียงลำดับของ .... คำสั่ง grep ที่แสดงรายการก่อนหน้านี้จะแสดงผลซ้ำ (มาก) และไม่ครอบคลุมรายการคำนำหน้าเหตุการณ์ที่จะต้องเข้าใจชื่อเหตุการณ์ที่สร้างขึ้นแบบไดนามิก คำสั่งเหล่านี้แสดงทั้งสองรายการด้วยค่าที่ไม่ซ้ำกันเท่านั้น คุณสามารถเพิ่มแฟล็ก -n เหมือนกับคำตอบ grep อื่น ๆ และรับหมายเลขบรรทัดที่ฉันคิด แต่คำถามไม่ได้ถามว่าพวกเขาอยู่ที่ไหนในรหัส
mprototype

คุณช่วยเพิ่มคำอธิบายนี้ลงในคำตอบของคุณได้ไหม จากนั้นคำตอบของคุณจะยอดเยี่ยมมาก ... (พร้อมที่จะทำการอัปโหลดแล้ว) :-)
Rajeev K Tomy

มันช่วยได้ไหม
mprototype

ใช่. +1 สำหรับสิ่งนั้น :)
Rajeev K Tomy

3

มีแผ่นโกงที่นี่ด้วยhttp://mikebywaters.wordpress.com/2012/07/23/magento-event-observer-list/


1
การเชื่อมโยง Lone ถือว่าเป็นคำตอบที่น่าสงสาร (ดูคำถามที่พบบ่อย ) เพราะมันเป็นความหมายด้วยตัวเองและทรัพยากรเป้าหมายไม่รับประกันว่าจะมีชีวิตอยู่ต่อไปในอนาคต มันจะดีกว่าที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
j0k



2

คุณสามารถค้นหารายการแบ็กเอนด์ + เหตุการณ์ส่วนหน้าทั้งหมดได้ในลิงค์เดียว

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


1
นี่ไม่ใช่ทรัพยากรที่สมบูรณ์เพราะไม่มีทรัพยากรที่สมบูรณ์
benmarks

คำตอบที่ซ้ำกัน ... ขยับตาของคุณขึ้น 200px;)
7ochem


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.