2013-02-05 66 views
0

我創建一個Magento模塊,我希望觀察者觸發時,我的自定義orderstatus被選中。Magento觸發觀察者與自定義orderstatus

實際情況: 人們選擇:'Payment Received'在觀察者中//DO STUFF被觸發。

這不起作用,所以這裏有什麼問題? (狀態正確顯示了雖然):-(

config.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <MOD_PaidStatus> 
      <version>1.0.0</version> 
     </MOD_PaidStatus> 
    </modules> 
    <global> 
     <sales> 
      <order> 
       <statuses> 
        <payment_received translate="label"><label>Payment Received</label></payment_received> 
       </statuses> 
       <states> 
        <processing translate="label"> 
         <label>Processing</label> 
         <statuses> 
          <processing default="1"/> 
          <payment_received default="2" /> 
         </statuses> 
         <visible_on_front/> 
        </processing> 
        <pending translate="label"> 
         <label>Pending</label> 
         <statuses> 
          <pending default="1"/> 
          <payment_received default="2" /> 
         </statuses> 
         <visible_on_front/> 
        </pending> 
       </states>     
      </order>    
     </sales> 
     <events> 
       <sales_order_resource_save_attribute_after> 
         <observers> 
           <PaidStatus>           
             <class>MOD_PaidStatus/observer</class>   
             <method>observeAttributeChange</method> 
             <type>singleton</type> 
           </PaidStatus> 
         </observers> 
       </sales_order_resource_save_attribute_after> 
     </events> 
    </global> 
</config> 

而且我Observer.php樣子:

class MOD_PaidStatus_Model_Observer { 

public function observeAttributeChange($observer){ 
    $attribute = $observer->getEvent()->getAttribute(); 
    if ($attribute->getAttributeCode() == 'status') { 
     mail('[email protected]', 'testcase', 'foo bar?'); 
    } 
} 

}

回答

1

爲了能夠在更改訂單的屬性「狀態」時執行某些操作,最好觀察一個e發泄。在這種情況下,事件將是sales_order_resource_save_attribute_after。觀察員功能可設置如下:

class YourPackage_YourModule_Model_Observer { 

public function observeAttributeChange($observer) 
{ 

    $attribute = $observer->getEvent()->getAttribute(); 

    if ($attribute->getAttributeCode() == 'status') { 
    // DO STUFF 
    } 
} 

在你的config.xml中輸入必要的觀測配置

<global> 
     <events> 
       <sales_order_resource_save_attribute_after> 
         <observers> 
           <your_observer_node_name>           
             <class>yourpackage_yourmodule/observer</class>   
             <method>observeAttributeChange</method> 
             <type>singleton</type> 
           </your_observer_node_name> 
         </observers> 
       </sales_order_resource_save_attribute_after> 
     </events> 
</global> 
+0

謝謝,我已經更新了問題中的代碼,但我不確定我是否理解。我仍然沒有收到電子郵件:[email protected] –

+0

你可以檢查是否調用了「observeAttributeChange($ observer)」函數嗎? (使用調試器或插入日誌調用)。如果是,attributeCode是否等於'狀態'? –

0

你可以重寫或觀察員做到這一點。

你對這兩個概念做了一些混合。

要使用重寫,不命名您的文件觀察,使用類似訂購 .PHP:

class MOD_PaidStatus_Model_**Order** extends Mage_Sales_Model_Order 

,並在你的config.xml中,在全球節點,補充一點:

<models> 
    <sales> 
     <rewrite> 
      <order>MOD_PaidStatus_Model_Order</order> 
     </rewrite> 
    </sales> 
</models> 

如果你想通過一個觀察者,使用名稱Observer.php和類名應該是:

MOD_PaidStatus_Model_Observer 

它不應該延伸任何東西。

的功能更像是

public function myEventHandling($event) 
{ 
    $order = $event->getOrder(); 
    $status = $order->getStatus(); 
    //DO YOUR STUFF here 
} 

但你應該聽的是不存在的order_status_changed_after活動,讓您添加到觸發它太...非常大的東西,如果你不是一個證實開發商。

如果你想要這樣的東西,你需要在你的config.xml文件中的一個事件節點來將你的Observer及其方法與事件關聯起來。請有關事件的一些搜索在Magento處理

問候,

編輯:觀察員和事件的方式,看看以前的帖子。但是處理這樣的通用事件是非常耗資源的方式。

+0

感謝您的回答,我更新了這篇文章,但我仍然沒有收到電子郵件,我看不到這裏有什麼問題:-S –