Où puis-je trouver une liste complète des événements Magento?

94

Je sais que Magento a un système en forme de crochet appelé événements. Est-ce que quelqu'un a une liste complète ou un script qui peut être utilisé pour déterminer quels événements peuvent être appelés?

benmarks
la source
4
J'utilise cela comme une bonne feuille de triche nicksays.co.uk/magento-events-cheat-sheet-1-7
Derrik Nyomo
1
@DerrikNyomo - vous devriez poster cela en tant que réponse avec un résumé des informations qu'il fournit. :-)
benmarks
1
Les feuilles de triche pour les événements sont en fait plus compliquées, car elles vous donnent un faux sentiment que «l'événement que je veux n'existe pas» et que vous risquez de perdre des heures en codage, après avoir manqué un événement qui aurait pu être utilisé sont créés dynamiquement) J'ai posté une réponse à cette question: lien et ma réponse concerne également cette question. Cela ne vous donne pas une 'liste' complète, mais vous donne une liste complète des événements pour l'action / le chargement de page auquel vous êtes intéressé.
ProxiBlue

Réponses:

102

Il n'y a pas une liste de tous les événements magento, car la plupart d'entre eux sont nommés dynamiquement.

Si vous me demandez, connaître ces événements clés (et leurs conséquences) est un bon point de départ (à côté de la liste de nick):

Chaque objet étendu de Mage_Core_Model_Abstract distribue de nombreux événements relatifs au chargement, à la sauvegarde et à la suppression:

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

Par exemple, pour ajouter des vérifications après le chargement de l'objet

app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after

ajouter des données supplémentaires à l'objet avant qu'il ne soit enregistré

app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before

Pour enregistrer d'autres modèles après que le "parent" a été enregistré

app/code/core/Mage/Core/Model/Abstract.php:466  
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after

nettoyer, avant que le modèle est supprimé

app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before

nettoyer, avant que le modèle est supprimé - ou peut-être après? Vous êtes ici encore dans la transaction!

app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after

Si vous voulez être sûr que l'entité a été supprimée

app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after

Les collections étendues à partir de Mage_Core_Model_Resource_Db_Collection_Abstract ont également deux événements génériques:

Par exemple: pour modifier le code SQL afin de charger la collection:

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

Par exemple: pour ajouter des données supplémentaires aux objets:

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
Fabian Blechschmidt
la source
4
Très bien une bonne réponse; en espérant quelque chose que nous pouvons rentrer dans le wiki. L'importance des _eventPrefixévénements de modèle, les événements de demande ciblée, les événements de bloc génériques parfois utiles, et l'importance de la journalisation pour rechercher des événements
benmarks
1
Excellent. Je voulais noter que dans Magento 2, ils doivent vraiment s'assurer que toutes les classes principales ont un préfixe d'événement défini. En fait, j'ai réécrit les classes simplement pour définir le préfixe d'événement afin que je puisse me connecter proprement aux événements de sauvegarde / chargement. Hmm. En fait, je pense que je vais aller vérifier la source de Magento 2 moi-même.
Tim Reynolds
3
L'approche que je prends habituellement, une édition rapide / enregistrer / revenir à app/code/core/Mage/Core/Model/App.phpet mage::log($eventName,null,'events.txt',true);à la dispatchEventméthode. Chargez la page que j'essaie d'observer. Évidemment, ne laissez pas cela tel quel et revenez en arrière une fois que votre var / logs / events.txt est créé. Sale, oui. Vite, oui. :)
B00MER
2
bien si vous voulez que votre observateur soit sur une page. Mais attention, il y a des événements qui devraient être envoyés, mais pourraient ne pas l'être. Il y a un ordre ou un événement de paiement qui n'est pas lancé, lorsqu'il est payé avec paypal ...
Fabian Blechschmidt
Un événement est-il déclenché après la création de l'envoi dans magento @FabianBlechschmidt
Kingshuk Deb
48

Faites le sang grep 'Mage::dispatchEvent' app/ -rsnCela vous donnera une liste d'événements spécifiques à votre installation comme la liste des événements peut varier en fonction de la version de Magento, personnalisations et extensions installées.

utilisateur487772
la source
2
C'est le meilleur conseil, cela inclura également des événements de modules tiers. Habituellement, lorsque je veux savoir à quels événements je peux m'accrocher pour une page particulière, je consigne les paramètres app: dispatchEvent.
Petar Dzhambazov le
1
Le grep vous donnera également de mauvaises informations: par exemple, il prétend que sales_order_place_aftercela se produira, mais il semble que l’appel à la mise à feu est commenté Checkout/Type/Onepage.php.
Kojiro
C'est une mauvaise réponse car cela ne capturera qu'une fraction des événements disponibles, car tous les événements générés dynamiquement seront manquants. @PetarDzhambazov donne de bons conseils pour se connecter à partir du répartiteur et ensuite charger les pages qui vous intéressent. La meilleure réponse est de loin la réponse acceptée donnée par FabianBlechschmidt
Dom
26

J'utilise cela comme une belle feuille de triche http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ . Il contient tous les événements pouvant être appelés en 1.7.

Derrik Nyomo
la source
4
Etant donné que vous avez déjà bien lié le contenu, il est préférable de fournir le contenu ici au cas où Nick
dirait
3
Je ne suis pas fan de cette liste, car 1: c'est incomplet, 2: il existe 1231 autres blogs sur Magento avec "tous" les événements sur Magento (+ quelques pages wiki sur Magento).
FlorinelChis
@benmarks devine ce qui s'est passé entre-temps ...
toon81
9

Je sais que cette question a été répondue je viens d'ajouter mon chemin ici:

  • Je prépare la page que je veux observer dans mon navigateur
  • J'ouvre app / Mage.php
  • pour public static function dispatchEvent(ln: ~ 446) au début j'ajoute //Mage::log($name, null, 'events.log', true);
  • décommentez cette ligne,
  • actualiser la page sur laquelle je suis
  • commenter à nouveau cette ligne

Ensuite, ouvrez var / log / events.log (~ 40 Ko) et visualisez de nombreux événements sur cette page uniquement! :)

Kresimir Pendic
la source
2
Cela manquera certains événements déclenchés avant la fusion de la configuration du magasin.
benmarks
6

La réponse a déjà été acceptée mais je vais quand même poster ma réponse pour l'avenir:

Si vous voulez voir la liste des événements de Magento, vous avez 3 options:

1) Google pour cela, il y a beaucoup de gens qui ont compilé une liste d'événements de Magento

2) Créez un module qui se raccorde à l' controller_action_predispatchévénement qui est l'événement appelé avant tout autre événement. Dans ce module, vous pouvez enregistrer certains événements distribués:

Ajoutez ce qui suit sur 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>

Et à l'intérieur de votre module / modèle / observateur:

public function hookToControllerActionPostDispatch($observer) {
    Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}

Ce qui précède consignera tous les événements expédiés ...

3) Si vous avez un accès SSH, vous pouvez exécuter la commande suivante pour obtenir une vue d'ensemble de tous les événements (et de leurs fichiers de destination):

cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/
Kenny
la source
1
Désolé, alors que n ° 3 est bon, les informations dans les réponses 1 & 2 de votre réponse sont vraiment incorrectes. 1) Quelques événements ont déjà été déclenchés controller_action_predispatch, notamment controller_front_init_before. 2) Cette approche ne consignera tout simplement pas tous les événements envoyés. S'agit-il d'une section ou d'une section incomplète?
Benmarks
Edité le "plus";)
Kenny
2
Désolé, toujours pas très précis :-( - il y a tellement plus d'événements envoyés (prédispatch, mise en page, rendu, ainsi que les chargements de modèles et de collections) ...
benmarks
Mise à jour de la réponse à "certains événements".
Kenny
4

J'utilise la barre d'outils de développement de Magento qui offre une fonctionnalité intéressante permettant d'afficher des événements pouvant être observés sur une page chargée.

Damir Mitrovic
la source
4

J'ai fait un grep sur le module de base Mage de Magento, et j'ai respecté une liste,

Liste exhaustive des événements Magento

PS Comme indiqué, peut contenir des événements appartenant à des fonctions obsolètes de Magento, il est donc important de vérifier le fichier et la référence de ligne avant la mise en œuvre.

Ouvert aux suggestions!

huzefam
la source
1
Il vous manque encore tous les événements magiques du sous-groupe. Ne peut pas être accueilli pour.
Benmarks
Événements magiques comme dans? Ceux qui sont dynamiques? Pourriez-vous élaborer plz @benmarks
huzefam
@benmarks Je suis d'accord, je ne pense pas que nous ayons besoin de préparer explicitement une liste pour cela
huzefam
D'où mon commentaire, qui reposait sur l'utilisation du terme "exhaustif"
benmarks
4
grep "::dispatchEvent" -R * | sort -u

grep "eventPrefix" -R * | sort -u

La commande grep précédemment répertoriée rendait les doublons (beaucoup) et ne couvrait pas la liste des préfixes d'événements nécessaires à la compréhension des noms d'événements générés dynamiquement. Ces commandes affichent les deux listes avec uniquement des valeurs uniques. Vous pouvez ajouter le drapeau -n comme l'autre réponse de grep et obtenir le numéro de ligne, je suppose. Mais la question ne demandait pas où ils étaient tous dans le code. ~ _ ~

mprototype
la source
nous avons une réponse similaire ici. Reportez- vous à la réponse de @TimBezhashvyly
Rajeev K Tomy
en quelque sorte .... la commande grep précédemment listée rendrait les doublons (beaucoup) et ne couvrait pas la liste des préfixes d'événements qui seraient nécessaires pour comprendre les noms d'événements générés dynamiquement. Ces commandes affichent les deux listes avec uniquement des valeurs uniques. Vous pouvez ajouter le drapeau -n comme l'autre réponse de grep et obtenir le numéro de ligne, je suppose. Mais la question ne demandait pas où ils étaient tous dans le code.
mprototype
Pourriez-vous s'il vous plaît ajouter cette description à votre réponse. Alors ta réponse devient super cool ... (je suis prêt à faire un vote positif) :-)
Rajeev K Tomy
Est ce que ça aide?
mprototype
Oui. +1 pour cela. :)
Rajeev K Tomy