Ich weiß, dass Magento ein Hook-ähnliches System namens Events hat. Hat jemand eine vollständige Liste oder ein Skript, mit dem bestimmt werden kann, welche Ereignisse aufgerufen werden können?
Ich weiß, dass Magento ein Hook-ähnliches System namens Events hat. Hat jemand eine vollständige Liste oder ein Skript, mit dem bestimmt werden kann, welche Ereignisse aufgerufen werden können?
Antworten:
Es gibt keine Liste aller magento-Ereignisse, da die meisten Ereignisse dynamisch benannt werden.
Wenn Sie mich fragen, ist die Kenntnis dieser Schlüsselereignisse (und der Konsequenzen) ein guter Ausgangspunkt (neben der Liste von nick):
Jedes Objekt, das von Mage_Core_Model_Abstract erweitert wurde, löst viele Ereignisse zum Laden, Speichern und Löschen aus:
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
Zum Beispiel, um Prüfungen hinzuzufügen, nachdem das Objekt geladen wurde
app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after
um dem Objekt zusätzliche Daten hinzuzufügen, bevor es gespeichert wird
app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before
Um andere Modelle zu speichern, nachdem das "Eltern" gespeichert wurde
app/code/core/Mage/Core/Model/Abstract.php:466
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after
bereinigen, bevor das Modell gelöscht wird
app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before
aufräumen, bevor das modell gelöscht wird - oder vielleicht nachher? Sie sind hier noch in der Transaktion!
app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after
Wenn Sie sicher sein möchten, dass die Entität gelöscht wurde
app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after
Die Sammlungen, die von Mage_Core_Model_Resource_Db_Collection_Abstract erweitert wurden, haben auch zwei generische Ereignisse:
Beispiel: So ändern Sie die SQL zum Laden der Auflistung:
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
Beispiel: So fügen Sie den Objekten zusätzliche Daten hinzu:
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
Ereignisse für das Modell, der Ereignisse für gezielte Anforderungen, der gelegentlich nützlichen allgemeinen
app/code/core/Mage/Core/Model/App.php
und mage::log($eventName,null,'events.txt',true);
zu der dispatchEvent
Methode. Laden Sie die Seite, die ich beobachten möchte. Lassen Sie dies natürlich nicht so wie es ist und kehren Sie zurück, sobald Ihre Datei var / logs / events.txt erstellt wurde. Dreckig, ja. Schnell ja. :)
Verdammt noch grep 'Mage::dispatchEvent' app/ -rsn
mal ! Hier finden Sie eine Liste der Ereignisse, die für Ihre Installation spezifisch sind. Die Liste der Ereignisse kann je nach Magento-Version, installierten Anpassungen und Erweiterungen variieren.
sales_order_place_after
dies passieren wird, aber es scheint, dass der Aufruf zum Feuern auskommentiert ist Checkout/Type/Onepage.php
.
Ich benutze dies als einen schönen Spickzettel http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ . Es hat alle Ereignisse, die in 1.7 aufgerufen werden können.
Ich weiß, dass diese Frage beantwortet wurde. Ich füge meinen Weg hierher hinzu:
public static function dispatchEvent
(ln: ~ 446) am anfang füge ich hinzu
//Mage::log($name, null, 'events.log', true);
Dann öffnest du var / log / events.log (~ 40kb) und siehst eine ganze Menge Ereignisse nur auf dieser Seite! :)
Die Antwort wurde bereits angenommen, aber ich werde meine Antwort trotzdem für die Zukunft posten:
Wenn Sie die Liste der Ereignisse in Magento anzeigen möchten, haben Sie drei Möglichkeiten:
1) Für Google gibt es eine Menge Leute, die eine Liste von Magento-Ereignissen zusammengestellt haben
2) Erstellen Sie ein Modul, controller_action_predispatch
das das Ereignis einbindet, das aufgerufen wird, bevor ein anderes Ereignis aufgerufen wird. In diesem Modul können Sie einige Ereignisse protokollieren, die ausgelöst werden:
Fügen Sie in config.xml Folgendes hinzu
<events>
<controller_action_postdispatch>
<observers>
<controller_action_after>
<class>yourmodule/observer</class>
<method>hookToControllerActionPostDispatch</method>
</controller_action_after>
</observers>
</controller_action_postdispatch>
</events>
Und innerhalb des yourmodule / Model / Observer:
public function hookToControllerActionPostDispatch($observer) {
Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}
Das obige würde jedes Ereignis protokollieren, das ausgelöst wird ...
3) Wenn Sie über SSH-Zugriff verfügen, können Sie den folgenden Befehl ausführen, um eine Übersicht über alle Ereignisse (und deren Dateien, an die sie gesendet werden) zu erhalten:
cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/
controller_action_predispatch
, insbesondere controller_front_init_before
. 2) Dieser Ansatz protokolliert einfach nicht jedes Ereignis, das ausgelöst wird. Ist dies ein Tippfehler oder ein unvollständiger Abschnitt?
Ich verwende die Magento Developer Toolbar, die eine nette Funktion zum Anzeigen von Ereignissen bietet, die auf geladenen Seiten beobachtet werden können.
Hier können Sie die meisten vorhandenen Ereignisse anzeigen: http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Ich habe ein Grep für das Magier-Kernmodul von Magento durchgeführt und eine Liste befolgt,
Vollständige Liste der Magento-Ereignisse
PS Wie bereits erwähnt, können Ereignisse enthalten sein, die sich in veralteten Funktionen von Magento befinden. Überprüfen Sie daher vor der Implementierung die Datei- und Zeilenreferenz.
Offen für Vorschläge!
grep "::dispatchEvent" -R * | sort -u
grep "eventPrefix" -R * | sort -u
Der zuvor aufgeführte Befehl grep rendert Duplikate (viele) und deckt nicht die Liste der Ereignispräfixe ab, die zum Verständnis der dynamisch generierten Ereignisnamen erforderlich sind. Diese Befehle rendern beide Listen nur mit eindeutigen Werten. Sie könnten das -n-Flag wie die andere grep-Antwort hinzufügen und die Zeilennummer erhalten, nehme ich an. Aber die Frage stellte keine Frage, wo in dem Code sie sich alle befanden. ~ _ ~
Hier gibt es auch einen Spickzettel http://mikebywaters.wordpress.com/2012/07/23/magento-event-observer-list/
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Hier finden Sie eine vollständige Liste der Beobachterereignisse.
Beziehen Sie sich auf diese Spickzettel
https://www.nicksays.co.uk/magento-events-cheat-sheet-1-8/ http://rabee.me/codes/magento/cheatsheet/1.9/
Es wird Ihnen helfen.
Sie finden alle Listen der Backend- und Frontend-Ereignisse unter einem Link
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Wenn jemand jemals eine aktualisierte Liste benötigt, versuche ich, diese auf dem neuesten Stand zu halten:
https://gist.github.com/digitalpianism/d8157c6b492238af2ed7809e5e3a134e
Sie können alle magento-1x-Ereignisse finden, indem Sie der URL folgen. https://magento2.atlassian.net/wiki/display/m1wiki/Magento+1.x+Events+Reference