【问题标题】:Trigger observer on Magento order status change events在 Magento 订单状态更改事件上触发观察者
【发布时间】:2019-04-10 17:22:23
【问题描述】:

一旦订单收到processing 状态,我需要自动为其创建发票。在我的扩展程序中应该观察哪个事件来实现这一点?


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

etc/modules 中的.xml

<?xml version="1.0"?>
<config>
<modules>
    <Atwix_Orderhook>
        <active>true</active>
        <codePool>community</codePool>
    </Atwix_Orderhook>
</modules>
</config>

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>

app/code/中的 Oberver.php...

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

【问题讨论】:

    标签: magento observers


    【解决方案1】:

    您可以观察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) {
            ...
        }
        ...
    }
    

    【讨论】:

    • 为了获得状态,我分别使用了$order-&gt;getStatus()$order-&gt;getOrigData('status')
    【解决方案2】:

    app/code/MyCompany/MyModule/etc/events.xml

    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
        <event name="sales_order_save_after">
            <observer name="mymodule_sales_order_save_after" instance="MyCompany\MyModule\Observer\CheckOrderStatus" />
        </event>
    </config>
    

    然后

    app/code/MyCompany/MyModule/Observer/CheckOrderStatus.php

    <?php
     namespace MyCompany\MyModule\Observer; 
    use Magento\Framework\Event\ObserverInterface; 
    
    class CheckOrderStatus implements ObserverInterface {
    
    
    
    protected $orderRepository;
    public function __construct(
                   \Magento\Sales\Api\OrderRepositoryInterface $orderRepository) { 
        $this->orderRepository = $orderRepository;
    }
    
    public function execute(\Magento\Framework\Event\Observer $observer) { 
        $order = $observer->getEvent()->getOrder();
        $customerId = $order->getCustomerId(); 
        $OrderStatus=$order->getStatus();
    
      if ($OrderStatus == ‘pending’) {
            //some work here
          }elseif ($OrderStatus == ‘processing’) {
            //some work here
          }else{
             // do something here
          }
      }
    
    
     }
    

    了解更多信息 https://mage2-blog.com/magento-2-get-order-submission/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多