2012-11-07 18 views
8

olay gözetmeninden geri göndericiye geri veriyorum Kayıt olduktan sonra bir etkinlik gönderen ürün kaydı için bir uzantı var. Başka bir uzantı, o olayı, kayıtlı ürünle ilişkiliyse bir sanal ürün için bir kupon oluşturmak için kullanır.Verileri Magento

Onların ürün Kayıt detayları ile birlikte bir e-posta kullanıcıya göndermek için oluşturulan kupon verileri geri almak gerekir.

geri olay gönderildiğinde yere gözlemci veri döndürmek için bir yol var mı?

cevap

24

Amacınız için Magento'da bir numara mevcut. Etkinlik verilerini, ürün veya kategori modeli gibi gözlemcilere iletebileceğinizden, bu verileri alabileceğiniz bir kap da oluşturabilirsiniz.

Örneğin bu tür eylemler memuru yapılabilir:

$couponContainer = new Varien_Object(); 
Mage::dispatchEvent('event_name', array('coupon_container' => $couponContainer)); 
if ($couponContainer->getCode()) { 
    // If some data was set by observer... 
} 

Ve bir gözlemci yöntemi aşağıdaki gibi görünebilir:

public function observerName(Varien_Event_Observer $observer) 
{ 
    $couponContainer = $observer->getEvent()->getCouponContainer(); 
    $couponContainer->setCode('some_coupon_code'); 
} 

zevk ve eğlence!

+0

'dan önce bir değişken kaydedin. Teşekkürler. – Ryan

+1

@Ivan: Bir gözlemciyi koleksiyonumda değiştirmek için bu yaklaşımı kullanabilir miyim? Coz koleksiyonu değiştirdikten ve gözlemciden '$ $' ı döndürmeye çalıştıktan sonra koleksiyon aynı kalıyor. Ürün koleksiyonu ile çalışıyorum. Mümkünse – zamil

3

Hayır, bunu yapmak için sistemde yerleşik hiçbir şey yok. Magento sözleşmesi, bir stdClass veya Varien_Object aktarım nesnesini oluşturmaktır.

self::$_transportObject yana

#File: app/code/core/Mage/Core/Block/Abstract.php 

... 
if (self::$_transportObject === null) 
{ 
    self::$_transportObject = new Varien_Object; 
} 

self::$_transportObject->setHtml($html); 
Mage::dispatchEvent('core_block_abstract_to_html_after', 
    array('block' => $this, 'transport' => self::$_transportObject)); 
$html = self::$_transportObject->getHtml(); 
... 

bir amacı, blok olay kodu görebilirsiniz ve PHP şekilde gibi bir referans davranırlar nesneleri, gözlemci taşıma nesne üzerinde yapılan herhangi bir değişiklik muhafaza edilecektir. Yani, yukarıdaki örnekte, eğer bir gözlemci geliştiricisi yeni HTML içerecektir yedekle sistemi blok kodu self::$_transportObject yılında

$html = $observer->getTransport()-setHtml('<p>New Block HTML'); 

söyledi. çok sayıda gözlemcinin bu değeri değiştirebileceğini ve Magento'daki sipariş gözlemcilerinin her bir yapılandırılmış sistem için farklı olacağını unutmayın.

Yapabileceğiniz ikinci bir yaklaşım Magento'nun kayıt defteri desenini kullanmaktır. dispatchEvent