Де я можу знайти повний перелік подій Magento?


94

Я знаю, що в Magento є гакова система, що називається подіями. Хтось має повний список або сценарій, за допомогою якого можна визначити, які події можна викликати?


4
Я використовую це як приємний шпаргалку nicksays.co.uk/magento-events-cheat-sheet-1-7
Derrik Nyomo

1
@DerrikNyomo - слід опублікувати це як відповідь разом із резюме інформації, яку він надає. :-)
орієнтири

1
Чит-листи для подій насправді більше клопоту, оскільки вони дають помилкове відчуття, що "події, яку я хочу, не існує", і ви можете витрачати години на кодування, пропустивши подію, яка могла бути використана (оскільки багато створюються динамічно) Я розмістив відповідь на це питання: посилання, і моя відповідь також стосується цього питання. Він не дає вам повного "списку", але він дає вам повний перелік подій для дії / завантаження сторінки, яку ви хочете підключити.
ProxiBlue

Відповіді:


102

Немає списку всіх подій магенто, оскільки більшість подій динамічно названі.

Якщо ви запитаєте мене, знаючи ці ключові події (і наслідки) - хороша відправна точка (поруч зі списком від ніка):

Кожен об’єкт, розширений з Mage_Core_Model_Ab 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_Ab 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 їм дійсно потрібно забезпечити, щоб усі основні класи мали визначений префікс події. Я фактично переписав класи просто для визначення префіксу події, щоб я міг чітко підключити до збереження / завантаження подій. Хм. Насправді я думаю, що я сам поїду перевірити джерело Magento 2.
Тім Рейнольдс

3
Я зазвичай використовую такий підхід - швидке редагування / збереження / повернення до методу app/code/core/Mage/Core/Model/App.phpта mage::log($eventName,null,'events.txt',true);до нього dispatchEvent. Завантажте сторінку, яку я намагаюся спостерігати. Очевидно, не залишайте це таким, як є, і поверніть, як тільки буде створено var / logs / events.txt. Брудно, так. Швидкий, так. :)
B00MER

2
добре, якщо ви хочете, щоб ваш спостерігач знаходився на одній сторінці. Але будьте обережні, є події, які слід відправити, а можуть бути і не. Є порядок замовлення чи оплати, який не викидається, коли платять з paypal ...
Fabian Blechschmidt

Чи є якась подія звільнена після створення відправки в Магенто @FabianBlechschmidt
Кінгшук,

48

Зробіть кривавий grep 'Mage::dispatchEvent' app/ -rsnЦе надасть вам список подій, характерних для вашої установки, оскільки список подій може відрізнятися залежно від встановленої версії Magento, налаштувань та розширень.


2
Це найкраща порада, вона також включатиме події сторонніх модулів. Зазвичай, коли я хочу знати, до яких подій я можу підключити певну сторінку, я реєструю параметри app: dispatchEvent.
Петро Джамбазов

1
Гріп також дасть вам погану інформацію: Наприклад, він стверджує, що sales_order_place_afterце станеться, але, схоже, заклик звільнити його прокоментується Checkout/Type/Onepage.php.
kojiro

Це погана відповідь, оскільки вона підбере лише частину наявних подій, оскільки вона повністю пропускає всі динамічно генеровані події. @PetarDzhambazov дає добру пораду увійти з диспетчером, а потім завантажити сторінки, які вас цікавлять. Найкраща відповідь на сьогодні - це прийнята відповідь, надана FabianBlechschmidt
Дом

26

Я використовую це як приємний шпаргалка http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ . У ньому є всі події, які можна назвати в 1.7.


4
Оскільки ви вже зробили хорошу роботу по зв’язуванню контенту, найкраще також надати вміст тут, якщо Нік скаже «закрутити Магенто» і видалить свою сторінку :-)
орієнтири

3
Я не прихильник цього списку, тому що 1: він є неповним, 2: є інші 1231 блоги про Magento з "усіма" подіями в Magento (+ кілька сторінок вікі в Magento).
FlorinelChis

@benmarks здогадуєтесь, що сталося в цей час ...
toon81

9

Я знаю, що на це запитання відповіли, я просто додаю тут свій шлях:

  • Я готую сторінку, яку хочу спостерігати у своєму браузері
  • Відкриваю додаток / Mage.php
  • для public static function dispatchEvent(ln: ~ 446) на початку додаю //Mage::log($name, null, 'events.log', true);
  • коментувати цю лінію,
  • оновити сторінку, на якій я перебуваю
  • прокоментуйте ще раз цей рядок

Потім ви відкриєте var / log / events.log (~ 40kb) і бачите цілу кількість подій лише на цій сторінці! :)


2
Це пропустить деякі події, які запускаються перед об'єднанням конфігурації магазину.
орієнтири

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

Я зробив греп на основний модуль Mage в Magento і доповнив список,

Вичерпний список подій Magento

PS Як зазначалося, можуть містити події, які знаходяться всередині застарілих функцій Magento, тому перевіряйте файл та посилання на рядок перед реалізацією.

Відкрийте для пропозицій!


1
Ви все ще пропускаєте всі підкласичні магічні події. Неможливо захопитись.
орієнтири

Магічні події, як у? Ті, які динамічні? Не могли б ви допрацювати plz @benmarks
huzefam


@benmarks Я погоджуюсь, я не думаю, що нам потрібно готувати для цього явний список
huzefam

Звідси мій коментар, який був запропонований на основі використання "вичерпних"
орієнтирів

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

grep "eventPrefix" -R * | sort -u

Попередня перерахована команда grep відображала б дублікати (багато), і вона не охоплює перелік префіксів подій, необхідних для розуміння динамічно створених імен подій. Ці команди відображають обидва списки лише з унікальними значеннями. Ви можете додати прапор -n, як і інший відповідь grep і отримати номер рядка, який я думаю. Але питання не запитувало, де в коді вони всі. ~ _ ~


ми маємо аналогічну відповідь тут. Див @TimBezhashvyly відповідь «s
Раджив K Tomy

сортування .... попередня перерахована команда grep відображала б дублікати (багато), і вона не охоплює список префіксів подій, необхідних для розуміння динамічно генерованих імен подій. Ці команди відображають обидва списки лише з унікальними значеннями. Ви можете додати прапор -n, як і інший відповідь grep і отримати номер рядка, який я думаю. Але питання не запитувало, де в коді вони всі.
mprototype

ви можете, будь ласка, додати цей опис до своєї відповіді. Тоді ваша відповідь стане супер крутою ... (я тоді готовий зробити підсумок) :-)
Радєєв К Томі

Чи допомагає це?
mprototype

Так. +1 для цього. :)
Радєєв К Томі

3

1
Одиноке посилання вважається поганою відповіддю (див. Faq ), оскільки воно само по собі безглузде і цільовий ресурс не гарантовано буде живим у майбутньому . Тут було б краще включити істотні частини відповіді та надати посилання для довідки.
j0k



2

Ви можете знайти весь список подій задніх днів та переходів за одним посиланням

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


1
Це не повний ресурс, тому що немає повного ресурсу.
орієнтири

Дублююча відповідь ... Рухайте очима на 200 пікселів вгору;)
оч


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.