2009-09-02 154 views
6

問候,在Magento我想要觸發一個事件,一旦訂單已被設置爲處理(通過網關確認或手動),例如:如果一般客戶(ID 1)花費超過100美元且付款已確認,設置他的組ID 4(銀VIP,它通過推廣規則將全球2%的折扣) 我會給懸賞這個,但我想答案前2天O_O如何觸發magento收到的付款事件?

編輯:在我到目前爲止收到的答案只是一個部分答案,我也發現這些鏈接非常混亂,我不清楚什麼是最簡單的設置,我有什麼配置創建等...我也試圖找出如何獲得付費客戶ID /模型。

回答

31

您應該首先在app/code/local中創建自己的模塊。 創建例如Moak/Vip目錄。這將是你的模塊的根源。

爲了Magento的知道它的存在,創建一個在etc/modules中名爲Moak_Vip.xml文件,包含以下內容:

<?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> 

然後,在你的模塊目錄,需要具備以下結構文件:

  • 等/ config.xml中
  • 型號/ Observer.php

config.xml定義您的模塊併爲給定事件聲明您的事件偵聽器(當onepage結帳過程完成時發送checkout_onepage_controller_success_action,支付已確認時發送sales_order_payment_pay)。

您不需要任何數據庫設置,因爲您不會保存任何新實體。 那麼你的配置文件看起來應該像下面這樣:

<?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> 

現在,你的觀察方法checkVipCustomer應該接受一個事件對象,從中可以獲取有關訂單,客戶的所有信息......並進行修改你喜歡。 查看app/code/core/Mage /.../Model/Magento模型類... 以查看如何瀏覽這些對象。

例子:

<?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; 
    } 

} 

注意我沒有測試任何我寫到這裏的代碼,所以小心輕放! 希望它有幫助,Magento有一個很難的學習曲線... 祝你好運!

+3

這是優秀的隊友。這可能有些過時,但它很好地說明了Magento如何實現事件/觀察者模式。乾杯! – 2011-07-15 01:44:59

+0

你的config.xml中的「computeExpirationDate」可能應該是「checkVipCustomer」 – 2014-05-30 06:42:49

+0

你是對的@KaeVerens,我編輯了答案。 – Julien 2014-06-16 01:48:00

1

您可以爲「sales_order_payment_pay」事件創建一個觀察者。這是magento 1.3中的事件的cheatsheet

並解釋如何創建observer methods。鏈接禮貌的優秀activecodeline和inchoo網站。