Я знаю, что у Magento есть система, похожая на крючок, которая называется events. У кого-нибудь есть полный список или скрипт, который можно использовать для определения того, какие события могут быть вызваны?
Я знаю, что у Magento есть система, похожая на крючок, которая называется events. У кого-нибудь есть полный список или скрипт, который можно использовать для определения того, какие события могут быть вызваны?
Ответы:
Нет списка всех событий 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 будет создан. Грязно, да. Быстро, да. :)
Do the bloody 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 Developer, которая имеет хорошую функцию отображения событий, которые можно наблюдать на загруженной странице.
Здесь вы можете просмотреть большинство существующих событий: http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Я сделал grep для основного модуля 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/
Это будет полезно для вас.
Вы можете найти весь список событий backend + frontend по одной ссылке
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