2009-09-02 54 views
6

Magento'da selamlar Bir olayın, bir siparişin işleme koyulmasıyla (ağ geçidi onayıyla veya manuel olarak) ayarlandığında, bir olayı tetiklemek istiyorum. Örneğin: Genel bir müşteri (id 1) 100 $ 'dan fazla harcama yaparsa ve ödeme onaylandıysa Ben buna bir lütuf verecekti ama 2 gün önce cevabı istiyorum 4 (tanıtım kuralı tarafından global olarak% 2 indirim alır gümüş VIP) yaptığı grup kimliği belirlenen O_oMagento'da ödeme sırasında bir etkinlik nasıl tetiklenir?

DÜZENLEME: Şimdiye kadar aldığım cevap sadece kısmi bir cevaptır, ben de bağlantıların çok kafa karıştırıcı olduğunu buluyorum, asgari kurulumun ne olduğu konusunda net değilim, neyi oluşturduğumu yapılandırmak için neye ihtiyacım var ... Ayrıca ben de ödeme yapan müşteriler nasıl id/model alınır.

cevap

31

Örneğin dizin Moak/Vip. Modülün kökü olacak.

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Moak_Vip> 
      <active>true</active> 
      <codePool>local</codePool> 
      <self_name>Moak VIP module</self_name> 
     </Moak_Vip > 
    </modules> 
</config> 

Ardından, modül dizininde, aşağıdaki yapıya ihtiyaç ve: sipariş Magento aşağıdaki içeriğe sahip, vs/modüller Moak_Vip.xml adlı bir dosya oluşturmak, bu var bilmek için ise

dosyalar:

  • etc/config.xml
  • Modeli/Observer.php

config.xml, modülünüzü tanımlar ve belirli bir etkinlik için olay dinleyicinizi bildirir (, sızıntı denetimi tamamlandığında gönderilir, ödeme onaylandığında sales_order_payment_pay gönderilir).

Yeni bir varlık kaydetmeyeceğiniz için herhangi bir DB kurulumuna ihtiyacınız yoktur. Yani yapılandırma dosyası aşağıdaki gibi görünmelidir:

Şimdi
<?xml version="1.0"?> 
<config> 
    <modules> 
     <Moak_Vip> 
      <version>0.1.0</version> 
     </Moak_Vip> 
    </modules> 
    <global> 
     <models> 
      <moak> 
       <class>Moak_Vip_Model</class> 
      </moak> 
     </models>  
     <events> 
      <sales_order_payment_pay> 
       <observers> 
        <moak_observer> 
         <type>singleton</type> 
         <class>moak/observer</class> 
         <method>checkVipCustomer</method> 
        </moak_observer> 
       </observers> 
      </sales_order_payment_pay >  
     </events> 
    </global> 
</config> 

, senin Gözlemci yöntemi checkVipCustomer sırayla, müşteri hakkında tüm bilgileri alabilir hangi bir olay nesnesi alması gereken ... ve değişiklikler yapmak Beğendin. Bu nesneler arasında nasıl gezineceğinizi görmek için uygulama/kod/çekirdek/Mage /.../ Model/... 'daki Magento model sınıflarına bakın.

Örnek:

<?php 

class Moak_Vip_Model_Observer 
{ 
    public function checkVipCustomer($event) 
    { 
     $order = $event->getInvoice()->getOrder(); // Mage_Sales_Model_Order 
     /* 
      - Check order amount 
      - Get customer object 
      - Set Group id 
      - $customer->save(); 
     */ 
     return $this; 
    } 

} 

Not Buraya yazdım kodun herhangi bir test, bu nedenle dikkatle işlemez ettik! Umut etmesine yardımcı oldu, Magento zor bir öğrenme eğrisine sahip ... İyi şanslar!

+3

Bu mükemmel, dostum. Muhtemelen biraz güncel değil, ancak Magento'nun olay/gözlemci modelini nasıl uyguladığı hakkında iyi bir fikir verdi. Şerefe! –

+0

config.xml dosyasındaki "computeExpirationDate" muhtemelen "checkVipCustomer" olmalıdır –

+0

Haklısınız @KaeVerens, cevabı düzenledim. – Julien

1

"sales_order_payment_pay" olayı için bir gözlemci oluşturabilirsiniz. İşte magento 1.3 olayların bir cheatsheet olduğunu.

observer methods'un nasıl oluşturulacağı hakkında bir açıklama. Linkler mükemmel aktif kod ve inchoo sitelerinin izniyle. Uygulama/kod/yerel uygulamasında kendi modülünüzü oluşturarak başlamalıdır.