Wiem, że Magento ma system przypominający hak zwany zdarzeniami. Czy ktoś ma pełną listę lub skrypt, za pomocą którego można określić, które zdarzenia można wywołać?
Wiem, że Magento ma system przypominający hak zwany zdarzeniami. Czy ktoś ma pełną listę lub skrypt, za pomocą którego można określić, które zdarzenia można wywołać?
Odpowiedzi:
Nie ma listy wszystkich zdarzeń magento, ponieważ większość zdarzeń ma nazwy dynamiczne.
Jeśli mnie zapytasz, znajomość tych kluczowych wydarzeń (i ich konsekwencji) jest dobrym punktem wyjścia (obok listy z nicka):
Każdy obiekt rozszerzony z Mage_Core_Model_Abstract wywołuje wiele zdarzeń dotyczących ładowania, zapisywania i usuwania:
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
Na przykład, aby dodać kontrole, po załadowaniu obiektu
app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after
aby dodać dodatkowe dane do obiektu przed jego zapisaniem
app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before
Aby zapisać inne modele po zapisaniu „rodzica”
app/code/core/Mage/Core/Model/Abstract.php:466
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after
wyczyść, zanim model zostanie usunięty
app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before
posprzątaj, zanim model zostanie usunięty - a może później? Jesteś tutaj nadal w transakcji!
app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after
Jeśli chcesz mieć pewność, że jednostka została usunięta
app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after
Kolekcje rozszerzone z Mage_Core_Model_Resource_Db_Collection_Abstract mają również dwa ogólne zdarzenia:
Na przykład: aby zmienić kod SQL i załadować kolekcję:
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
Na przykład: aby dodać dodatkowe dane do obiektów:
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
zdarzeń modelowych, zdarzeń żądania ukierunkowanego, czasami użytecznych ogólnych zdarzeń blokowych oraz znaczenie logowania w celu znalezienia zdarzeń
app/code/core/Mage/Core/Model/App.php
i mage::log($eventName,null,'events.txt',true);
do dispatchEvent
metody. Załaduj stronę, którą próbuję obserwować. Oczywiście nie zostawiaj tego tak, jak jest i przywróć po utworzeniu pliku var / logs / events.txt. Brudne, tak. Szybko tak. :)
Do the bloody grep 'Mage::dispatchEvent' app/ -rsn
Zapewni ci to listę wydarzeń specyficznych dla twojej instalacji, ponieważ lista wydarzeń może się różnić w zależności od wersji Magento, zainstalowanych dostosowań i rozszerzeń.
sales_order_place_after
tak się stanie, ale wygląda na to, że wezwanie do strzału, z którego został skomentowany, zostało skomentowane Checkout/Type/Onepage.php
.
Używam tego jako ładnego ściągawki http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ . Ma wszystkie zdarzenia, które można wywołać w 1.7.
Wiem, że odpowiedziano na to pytanie, dodam tutaj swoją drogę:
public static function dispatchEvent
(ln: ~ 446) na początku dodaję
//Mage::log($name, null, 'events.log', true);
Następnie otwierasz var / log / events.log (~ 40kb) i widzisz wiele wydarzeń tylko na tej stronie! :)
Odpowiedź została już zaakceptowana, ale i tak opublikuję moją odpowiedź na przyszłość:
Jeśli chcesz zobaczyć listę wydarzeń, które Magento ma, masz 3 opcje:
1) Google, jest wiele osób, które opracowały listę wydarzeń Magento
2) Utwórz moduł, który przechwytuje controller_action_predispatch
zdarzenie, które jest wywoływane przed wywołaniem jakiegokolwiek innego zdarzenia. Wewnątrz tego modułu możesz rejestrować niektóre zdarzenia, które są wywoływane:
Dodaj następujące informacje na 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>
A wewnątrz modułu / Modelu / Obserwatora:
public function hookToControllerActionPostDispatch($observer) {
Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}
Powyższe zapisuje każde wysłane zdarzenie ...
3) Jeśli masz dostęp do SSH, możesz uruchomić następujące polecenie, aby uzyskać przegląd wszystkich zdarzeń (i ich plików, w których są wysyłane):
cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/
controller_action_predispatch
Zwłaszcza kilka wcześniej odpalonych wydarzeń controller_front_init_before
. 2) Takie podejście po prostu nie rejestruje każdego wysłanego zdarzenia, czy jest to literówka czy niekompletna sekcja?
Używam Magento Developer Toolbar, który ma fajną funkcję wyświetlania zdarzeń, które można zaobserwować na ładowanej stronie.
Tutaj możesz wyświetlić większość istniejących wydarzeń: http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Zrobiłem grep na głównym module Magento i przestrzegałem listy,
Wyczerpująca lista wydarzeń Magento
PS Jak wskazano, może zawierać zdarzenia, które są w przestarzałych funkcjach Magento, więc sprawdź implementację pliku i linii przed implementacją.
Otwarty na sugestie!
grep "::dispatchEvent" -R * | sort -u
grep "eventPrefix" -R * | sort -u
Poprzednio wymienione polecenie grep wyświetlałoby duplikaty (często) i nie obejmuje listy prefiksów zdarzeń, które byłyby wymagane do zrozumienia dynamicznie generowanych nazw zdarzeń. Te polecenia renderują obie listy z unikalnymi wartościami. Możesz dodać flagę -n jak inną odpowiedź grep i uzyskać numer linii, jak sądzę. Ale pytanie nie zadawało, gdzie są w kodzie. ~ _ ~
tutaj jest ściągawka tutaj http://mikebywaters.wordpress.com/2012/07/23/magento-event-observer-list/
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Tutaj możesz znaleźć pełną listę wydarzeń obserwatora.
Zobacz te ściągawki
https://www.nicksays.co.uk/magento-events-cheat-sheet-1-8/ http://rabee.me/codes/magento/cheatsheet/1.9/
Pomoże ci to.
Możesz znaleźć całą listę zdarzeń backend + frontend na jednym linku
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Jeśli ktoś potrzebuje zaktualizowanej listy, staram się ją aktualizować:
https://gist.github.com/digitalpianism/d8157c6b492238af2ed7809e5e3a134e
Możesz znaleźć wszystkie wydarzenia magento-1x, podążając za adresem URL. https://magento2.atlassian.net/wiki/display/m1wiki/Magento+1.x+Events+Reference