触发Magento订单状态更改事件的观察者

use*_*942 2 observers magento

收到processing状态后,我需要自动在订单上创建发票.在我的扩展中应该遵守哪个事件来实现这一目标?


我正在尝试,但这段代码不起作用,它可以是什么?

etc/modules中的.xml

<?xml version="1.0"?>
<config>
<modules>
    <Atwix_Orderhook>
        <active>true</active>
        <codePool>community</codePool>
    </Atwix_Orderhook>
</modules>
</config>
Run Code Online (Sandbox Code Playgroud)

app/code /中的config.xml

<?xml version="1.0"?>
<config>
<modules>
    <Atwix_Orderhook>
        <version>1.0</version>
    </Atwix_Orderhook>
</modules>
<global>
    <models>            
        <orderhook>
            <class>Atwix_Orderhook_Model</class>
        </orderhook>
    </models>
    <events>
        <sales_order_save_after>
            <observers>
                <auto_invoice_order>
                    <type>singleton</type>
                    <class>Atwix_Orderhook_Model_Observer</class>
                    <method>implementOrderStatus</method>
                </auto_invoice_order>
            </observers>
        </sales_order_save_after>
    </events>

</global>
</config>
Run Code Online (Sandbox Code Playgroud)

Oberver.php在app/code/...

<?php
class Atwix_Orderhook_Model_Observer 
{
public function implementOrderStatus($event)
{
    $order = $event->getOrder();

    if ($order == 'processing') {
        if ($order->canInvoice())
            $this->_processOrderStatus($order);
    }
    return $this;
}
                        private function _processOrderStatus($order)
                        {
                            $invoice = $order->prepareInvoice();

                            $invoice->register();
                            Mage::getModel('core/resource_transaction')
                               ->addObject($invoice)
                               ->addObject($invoice->getOrder())
                               ->save();

                            $invoice->sendEmail(false, '');
                            return true;
                        }
}
Run Code Online (Sandbox Code Playgroud)

fan*_*ice 8

您可以观察sales_order_save_after并检查您所定位的订单状态,例如:

public function exampleEventHandler(Varien_Event_Observer $observer)
{
    /* @var Mage_Sales_Model_Order $order */
    $order = $observer->getOrder();
    $stateProcessing = $order::STATE_PROCESSING;
    // Only trigger when an order enters processing state.
    if ($order->getState() == $stateProcessing && $order->getOrigData('state') != $stateProcessing) {
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 为了获取状态,我分别使用了 `$order-&gt;getStatus()` 和 `$order-&gt;getOrigData('status')` 。 (2认同)