Я знаю, що в Magento є гакова система, що називається подіями. Хтось має повний список або сценарій, за допомогою якого можна визначити, які події можна викликати?
Я знаю, що в Magento є гакова система, що називається подіями. Хтось має повний список або сценарій, за допомогою якого можна визначити, які події можна викликати?
Відповіді:
Немає списку всіх подій магенто, оскільки більшість подій динамічно названі.
Якщо ви запитаєте мене, знаючи ці ключові події (і наслідки) - хороша відправна точка (поруч зі списком від ніка):
Кожен об’єкт, розширений з 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
_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
Це надасть вам список подій, характерних для вашої установки, оскільки список подій може відрізнятися залежно від встановленої версії Magento, налаштувань та розширень.
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) і бачите цілу кількість подій лише на цій сторінці! :)
Відповідь уже прийнято, але все одно я буду публікувати свою відповідь на майбутнє:
Якщо ви хочете переглянути список подій, які має 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/
controller_action_predispatch
, зокрема controller_front_init_before
. 2) Цей підхід просто не буде реєструвати кожну подію, що надсилається, це друкарська помилка чи неповний розділ?
Я використовую Панель інструментів розробника Magento, яка має гарну особливість відображення подій, які можна спостерігати на завантаженій сторінці.
Тут ви можете переглянути більшість існуючих подій: http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Я зробив греп на основний модуль Mage в Magento і доповнив список,
Вичерпний список подій 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