So che Magento ha un sistema ad uncino chiamato eventi. Qualcuno ha un elenco completo o uno script che può essere utilizzato per determinare quali eventi possono essere chiamati?
So che Magento ha un sistema ad uncino chiamato eventi. Qualcuno ha un elenco completo o uno script che può essere utilizzato per determinare quali eventi possono essere chiamati?
Risposte:
Non esiste un elenco di tutti gli eventi di Magento, poiché la maggior parte degli eventi ha un nome dinamico.
Se me lo chiedi, conoscere questi eventi chiave (e le conseguenze) è un buon punto di partenza (accanto all'elenco di nick):
Ogni oggetto esteso da Mage_Core_Model_Abstract invia molti eventi riguardanti il caricamento, il salvataggio e l'eliminazione:
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
Ad esempio per aggiungere controlli, dopo che l'oggetto è stato caricato
app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after
per aggiungere ulteriori dati all'oggetto prima che venga salvato
app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before
Per salvare altri modelli dopo aver salvato il "genitore"
app/code/core/Mage/Core/Model/Abstract.php:466
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after
ripulire, prima che il modello venga eliminato
app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before
ripulire, prima che il modello venga eliminato - o forse dopo? Sei ancora qui nella transazione!
app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after
Se vuoi essere sicuro che l'entità sia stata eliminata
app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after
Le raccolte estese da Mage_Core_Model_Resource_Db_Collection_Abstract hanno anche due eventi generici:
Ad esempio: per modificare l'SQL per caricare la raccolta:
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
Ad esempio: per aggiungere ulteriori dati agli oggetti:
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
per gli eventi del modello, gli eventi di richiesta mirati, gli eventi di blocco generici occasionalmente utili e l'importanza della registrazione per trovare gli eventi
app/code/core/Mage/Core/Model/App.php
e mage::log($eventName,null,'events.txt',true);
al dispatchEvent
metodo. Carica la pagina che sto cercando di osservare. Ovviamente non lasciarlo così com'è e ripristina una volta creato var / logs / events.txt. Sporco, si. Veloce, si. :)
Fai il sanguinoso grep 'Mage::dispatchEvent' app/ -rsn
Questo ti fornirà un elenco di eventi specifici per la tua installazione in quanto l'elenco degli eventi può variare a seconda della versione di Magento, delle personalizzazioni e delle estensioni installate.
sales_order_place_after
ciò accadrà, ma sembra che la chiamata a sparare sia commentata Checkout/Type/Onepage.php
.
Lo uso come un bel cheat sheet http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ . Ha tutti gli eventi che possono essere chiamati in 1.7.
So che è stata data una risposta a questa domanda. Ho appena aggiunto la mia strada qui:
public static function dispatchEvent
(ln: ~ 446) all'inizio aggiungo
//Mage::log($name, null, 'events.log', true);
Quindi apri var / log / events.log (~ 40kb) e vedi molti eventi solo su quella pagina! :)
La risposta è già stata accettata ma pubblicherò comunque la mia risposta per il futuro:
Se vuoi vedere l'elenco degli eventi che Magento ha, hai 3 opzioni:
1) Google, ci sono molte persone che hanno compilato un elenco di eventi Magento
2) Creare un modulo che si aggancia controller_action_predispatch
all'evento che è l'evento che viene chiamato prima che venga chiamato qualsiasi altro evento. All'interno di questo modulo è possibile registrare alcuni eventi che vengono inviati:
Aggiungi quanto segue su 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>
E all'interno del tuo modulo / modello / osservatore:
public function hookToControllerActionPostDispatch($observer) {
Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}
Quanto sopra registra ogni evento che viene inviato ...
3) Se si dispone dell'accesso SSH, è possibile eseguire il comando seguente per ottenere una panoramica di tutti gli eventi (e dei relativi file in cui vengono inviati):
cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/
controller_action_predispatch
, in particolare controller_front_init_before
. 2) Questo approccio semplicemente non registra tutti gli eventi inviati, si tratta di una sezione errata o incompleta?
Sto usando Magento Developer Toolbar che ha una bella funzione di visualizzazione di eventi che possono essere osservati sulla pagina caricata.
Qui puoi vedere la maggior parte degli eventi esistenti: http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Ho fatto un grep sul modulo Mage principale di Magento e ho rispettato un elenco,
Elenco esaustivo di eventi Magento
PS Come sottolineato, può contenere eventi che si trovano all'interno di funzioni deprecate di Magento, quindi controlla il riferimento al file e alla linea prima dell'implementazione.
Aperto per suggerimenti!
grep "::dispatchEvent" -R * | sort -u
grep "eventPrefix" -R * | sort -u
Il precedente comando grep elencato renderebbe i duplicati (molto) e non copre l'elenco dei prefissi di eventi che sarebbero necessari per comprendere i nomi degli eventi generati dinamicamente. Questi comandi visualizzano entrambi gli elenchi con solo valori univoci. Potresti aggiungere il flag -n come l'altra risposta grep e ottenere il numero di riga suppongo. Ma la domanda non poneva dove fossero nel codice. ~ _ ~
c'è un cheat sheet qui anche http://mikebywaters.wordpress.com/2012/07/23/magento-event-observer-list/
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Qui puoi trovare un elenco completo degli eventi di osservazione.
Fare riferimento a questi cheat sheet
https://www.nicksays.co.uk/magento-events-cheat-sheet-1-8/ http://rabee.me/codes/magento/cheatsheet/1.9/
Ti sarà utile.
Puoi trovare tutto l'elenco degli eventi backend + frontend su un singolo link
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/magento_events
Se qualcuno ha mai bisogno di un elenco aggiornato, sto cercando di mantenerlo aggiornato:
https://gist.github.com/digitalpianism/d8157c6b492238af2ed7809e5e3a134e
Puoi trovare tutti gli eventi di magento-1x seguendo l'URL. https://magento2.atlassian.net/wiki/display/m1wiki/Magento+1.x+Events+Reference