Magento etkinliklerinin tam listesini nerede bulabilirim?


94

Magento'nun olaylar denilen kancaya benzer bir sistemi olduğunu biliyorum. Hangi olayların çağrılabileceğini belirlemek için kullanılabilecek eksiksiz bir liste veya bir komut dosyası var mı?



1
@DerrikNyomo - bunu sağladığı bilgilerin özeti ile birlikte bir cevap olarak göndermelisiniz. :-)
Ocak'ta 13:40

1
Olaylar için aldatma çarşafları aslında size daha fazla güçlük veriyor, çünkü 'istediğim olayın olmadığı' konusunda yanlış bir his veriyorlar ve kullanılabilecek bir olayı kaçırdıktan sonra saatlerce süren bir kodlama israf edebilirsiniz. dinamik olarak oluşturulurlar) Ben bu sorunun cevabını gönderdim: bağlantı ve cevabım da bu soruya ait. Size tam bir 'liste' vermez, ancak ilgilenmek istediğiniz eylem / sayfa yüklemesi için tam bir etkinlik listesi verir.
ProxiBlue

Yanıtlar:


102

Tüm magento olaylarının bir listesi yoktur, çünkü olayların çoğu dinamik olarak adlandırılmıştır.

Bana sorarsanız, bu önemli olayları (ve sonuçlarını) bilmek iyi bir başlangıç ​​noktasıdır (nickli listenin yanında):

Mage_Core_Model_Abstract'dan genişletilen her Nesne, yükleme, kaydetme ve silme etrafında birçok olay gönderir:

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

Örneğin, çekleri eklemek için, nesne yüklendikten sonra

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

kaydedilmeden önce nesneye ek veri eklemek için

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

"Ebeveyn" kaydedildikten sonra diğer modelleri kaydetmek için

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

Model silinmeden önce temizleyin.

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

model silinmeden önce - veya daha sonra belki temizlenebilir mi? Hala işlemdesiniz!

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

Varlığın silindiğinden emin olmak istiyorsanız

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'den genişletilmiş koleksiyonların da iki genel etkinliği vardır:

Örneğin: koleksiyonu yüklemek üzere SQL'i değiştirmek için:

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

Örneğin: nesnelere ek veri eklemek için:

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

4
Çok iyi bir cevap; wiki'de tutabileceğimiz bir şey umuduyla. _eventPrefixModel olayların önemi , hedeflenen talep olayları, zaman zaman faydalı olan genel blok olayları ve olayları bulmak için günlüğe kaydetmenin önemi
13'te

1
Mükemmel. Magento 2'de, tüm çekirdek sınıfların tanımlanmış bir olay önekine sahip olmalarını sağlamak zorunda olduklarını not etmek istedim. Aslında olay önekini tanımlamak için sınıfları yeniden yazdım, böylece olayları kaydet / yükle olaylarına temiz bir şekilde bağlanabiliyorum. Hmm. Aslında Magento 2 kaynağını kendim kontrol edeceğim.
Tim Reynolds

3
Genellikle almak yaklaşım hızlı bir düzenleme / kaydetme / geri dönmek olduğunu app/code/core/Mage/Core/Model/App.phpve mage::log($eventName,null,'events.txt',true);hiç dispatchEventyöntemle. Sayfayı yükle Gözlemeye çalışıyorum. Açıkçası bunu olduğu gibi bırakmayın ve var / logs / events.txt dosyanız oluşturulduktan sonra geri dönmeyin. Kirli, evet. Çabuk, evet. :)
B00MER

2
Güzel, gözlemcinizin bir sayfada olmasını istiyorsanız. Ancak dikkatli olun, gönderilmesi gereken, ama olamayacak olaylar var. Paypal ile ödeme yapıldığında atılmayan bir emir ya da ödeme olayı var ...
Fabian Blechschmidt 16:13

Magento @ FabianBlechschmidt'de sevkiyatın yaratılmasından sonra herhangi bir olay kovuldu mu
Kingshuk Deb

48

Kanlı yapın grep 'Mage::dispatchEvent' app/ -rsnBu, kurulum listesi Magento versiyonuna, kurulu olan özelleştirmelere ve uzantılara bağlı olarak değişebileceğinden kurulumunuza özel olayların bir listesini sunar.


2
Bu en iyi tavsiyedir, 3. parti modül etkinliklerini de içerecektir. Genellikle belirli bir sayfa için hangi olaylara bağlanabileceğimi bilmek istediğimde, app: dispatchEvent parametrelerini kaydederim.
Petar Dzhambazov

1
Grep ayrıca size kötü bilgi verecek: Mesela, bunun sales_order_place_afterolacağını iddia ediyor , ancak ateş çağrısının yorumlandığı anlaşılıyor Checkout/Type/Onepage.php.
kojiro

Bu, dinamik olarak oluşturulmuş tüm olayları tamamen özlediği için mevcut olayların sadece bir kısmını toplayacağından kötü bir cevaptır. @PetarDzhambazov, memurdan giriş yapmak ve ilgilendiğiniz sayfaları yüklemek için iyi tavsiyeler veriyor. Şimdiye kadar en iyi cevap FabianBlechschmidt
Dom

26

Bunu güzel bir hile sayfası olarak kullanıyorum http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ . 1.7'de çağrılabilecek tüm olaylara sahiptir.


4
Zaten içerik bağlayarak iyi bir iş yaptık beri, iyi de Nick "Magento vida" ve onun sayfa :-) siler diyor diye burada içerik sağlamak için
benmarks

3
Bu listenin hayranı değilim, çünkü 1: eksik, 2: Magento ile ilgili 1231 blog var, Magento'daki "tümü" olayları (+ Magento'daki wiki sayfaları).
FlorinelChis

@benmarks ortalama süre içinde neler olduğunu tahmin ...
toon81

9

Bu sorunun cevaplandığını biliyorum, buraya sadece yolumu ekliyorum:

  • Tarayıcımda gözlemlemek istediğim sayfayı hazırlıyorum
  • App / Mage.php dosyasını açtım
  • public static function dispatchEventBen eklemek için (ln: ~ 446) için //Mage::log($name, null, 'events.log', true);
  • bu çizgiyi uncomment,
  • bulunduğum sayfayı yenile
  • bu satırda tekrar yorum yapın

Daha sonra var / log / events.log (~ 40kb) dosyasını açın ve sadece bu sayfadaki bir sürü olayı görün! :)


2
Bu, store config birleştirilmeden önce başlatılan bazı olayları kaçıracaktır.
benmarks

6

Cevap çoktan kabul edildi, ancak gelecek için hala cevabımı göndereceğim:

Magento'nun sahip olduğu etkinliklerin listesini görmek istiyorsanız 3 seçeneğiniz var:

1) Google bunun için Magento etkinliklerinin bir listesini derleyen birçok insan var

2)controller_action_predispatch Başka bir olay çağrılmadan önce çağrılan olay olan olayı kancalayan bir modül oluşturun . Bu modülün içinde gönderilen bazı olayları kaydedebilirsiniz:

Config.xml dosyasına şunu ekleyin

<events>
    <controller_action_postdispatch>
        <observers>
            <controller_action_after>
                <class>yourmodule/observer</class>
                <method>hookToControllerActionPostDispatch</method>
            </controller_action_after>
        </observers>
    </controller_action_postdispatch>
</events>

Ve senin modülün / Model / Gözlemcinin içinde:

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

Yukarıdakiler, gönderilen her olayı günlüğe kaydeder ...

3) SSH erişiminiz varsa, tüm olaylara (ve gönderildikleri dosyalara) genel bir bakış için aşağıdaki komutu çalıştırabilirsiniz:

cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/

1
Maalesef, # 3 iyi olsa da, cevabınızdaki 1 ve 2'deki bilgiler gerçekten doğru değil. 1) Öncesinde controller_action_predispatch, özellikle de ateşlenen birkaç olay var controller_front_init_before. 2) Bu yaklaşım basitçe gönderilen her olayı kaydetmeyecek, bu bir yazım hatası mı yoksa eksik bir bölüm mü?
ben

"Çoğu";)
Kenny

2
Üzgünüz, hala çok doğru değil :-( - gönderilen çok fazla etkinlik var (predispatch, düzen, oluşturma, ayrıca model ve koleksiyon yükleri) ...
benmark

"Bazı etkinlikler" cevabı güncellendi.
Kenny

4

Yüklenen sayfada gözlenebilecek olayları görüntüleme güzel özelliği olan Magento Geliştirici Araç Çubuğunu kullanıyorum.



4

Magento'nun çekirdek Mage modülünü tanıdım ve bir listeye uydum.

Magento Olaylarının Kapsamlı Listesi

PS Belirtildiği gibi, Magento'nun kullanım dışı işlevlerinin içinde olaylar içerebilir, bu nedenle uygulamadan önce dosya ve satır referansını kontrol edin.

Önerilere açık!


1
Hala tüm alt sınıflardaki sihirli olayları özlüyorsun. İçin grepped olamaz.
benmarks

Sihirli olaylar nasıl? Dinamik olanlar? Plz @benmarks
huzefam


@benmarks katılıyorum, bunun için açıkça bir liste hazırlamamız gerektiğini düşünmüyorum
huzefam

Bu yüzden benim yorum, hangi "ayrıntılı" kullanımına dayanarak teklif edildi
benmarks 16

4
grep "::dispatchEvent" -R * | sort -u

grep "eventPrefix" -R * | sort -u

Önceden listelenen grep komutu, kopyaları (çok) verir ve dinamik olarak oluşturulan olay adlarını anlamak için gereken olay öneklerinin listesini kapsamaz. Bu komutlar her iki listeyi yalnızca benzersiz değerlerle oluşturur. Diğer grep cevabı gibi -n bayrağını ekleyebilir ve sanırım satır numarasını alabilirsiniz. Ancak soru kodda nerede olduklarını sormadı. ~ _ ~


Burada benzer bir cevabımız var. Bakınız @TimBezhashvyly cevabını
Rajeev K Tomy

sıralama .... önceki listelenen grep komutu yinelenenleri (çok) oluşturur ve dinamik olarak oluşturulan olay adlarını anlamak için gereken olay öneklerinin listesini kapsamaz. Bu komutlar her iki listeyi yalnızca benzersiz değerlerle oluşturur. Diğer grep cevabı gibi -n bayrağını ekleyebilir ve sanırım satır numarasını alabilirsiniz. Ancak soru kodda nerede olduklarını sormadı.
mprototype

Cevabınıza bu açıklamayı ekleyebilir misiniz? O zaman cevabınız süper oldu ... (sonra bir oy vermeye hazırım) :-)
Rajeev K Tomy

Bu yardımcı olur mu?
mprototype

Evet. Bunun için +1. :)
Rajeev K Tomy






Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.