0

当订单状态更改为已完成时,我想创建一个事件来导出库存。

我创建了覆盖Mage_Sales_Model_Order的模块并尝试生成一个事件

(sales_order_status_change)。

当我从 magento 管理面板查看和订购并更改订单状态以完成时,它的工作原理是在我的扩展类中打印一些东西,它显示,它很好。在这里我生成事件。(问题可能在这里,可能是事件未生成)

我创建了另一个模块来观察这个事件。但我无法进入我的观察者课程。我无法打印任何内容并退出,这意味着代码无法运行。

但是在同一个观察者类中,如果更改配置并观察其他一些事件(来自 Magento 内置事件)它可以工作。就像我测试了 catalog_controller_product_view

这是我的事件生成器模块。

应用程序/etc/modules/Gol_Eventgenerator.xml

<?xml version="1.0"?>
<config>
  <modules>
    <Gol_Eventgenerator>
      <active>true</active>
      <codePool>local</codePool>
    </Gol_Eventgenerator>
  </modules>
</config>

app\code\local\Gol\Eventgenerator\etc\config.xml

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <Gol_Eventgenerator>
            <version>0.1.0</version>
        </Gol_Eventgenerator>
    </modules>
    <global>
        <models>
            <sales>
                <rewrite>
                    <order>Gol_Eventgenerator_Model_Order</order>
                </rewrite>
            </sales>
        </models>
    </global>
</config>

app\code\local\Gol\Eventgenerator\Model\Order.php

<?php
class Gol_Eventgenerator_Model_Order extends Mage_Sales_Model_Order
{
    public function setState($state, $status = false, $comment = '', $isCustomerNotified = null)
    {   
        //if I print something here and exit, it does will.
        Mage::dispatchEvent('sales_order_status_change', array('order' => $this, 'state' => $state, 'status' => $status, 'comment' => $comment, 'isCustomerNotified' => $isCustomerNotified));
        return parent::setState($state, $status, $comment, $isCustomerNotified);
    }
}

以下是观察者模块的详细信息

应用程序/etc/modules/Gol_Inventory.xml

<?xml version="1.0"?>
<config>
  <modules>
    <Gol_Inventory>
      <active>true</active>
      <codePool>local</codePool>
    </Gol_Inventory>
  </modules>
</config>

app\code\local\Gol\Inventory\etc\config.xml

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <Gol_Inventory>
            <version>0.1.0</version>
        </Gol_Inventory>
    </modules>        
    <global>        
        <events>
            <sales_order_status_change>
                <observers>
                    <Gol_Inventory_observer>
                        <type>singleton</type>
                        <class>Gol_Inventory_Model_Observer</class>
                        <method>exportEnventory</method>
                    </Gol_Inventory_observer>
                </observers>
            </sales_order_status_change>
        </events>
    </global>
</config>

app\code\local\Gol\Inventory\Model\Observer.php

<?php
class Gol_Inventory_Model_Observer
{
  public function exportEnventory($observer)
  {   
        echo "Inside exportEvnentory method";
        exit;
      //$order = $observer->getEvent()->getOrder();
      //$state = $observer->getEvent()->getState();
      //$status = $observer->getEvent()->getStatus();
  }
}

为前端和管理员生成事件的方式有什么区别???除了

,在配置文件中。

如果我没有遵循一些非常常见的事情,请提前道歉。新的magento。

我试图跟随。

这个

4

1 回答 1

0

仅当订单更改状态时没有事件,但您可以轻松检查订单是否正在更改状态以及现在的状态:

    public function exportEnventory(Varien_Event_Observer $observer)
    {
        $status = $observer->getEvent()->getOrder()->getStatus();
        $originalData = $observer->getEvent()->getOrder()->getOrigData();
        $previousStatus = $originalData['status'];

        if (($status !== $previousStatus) && ($status == Mage_Sales_Model_Order::STATE_COMPLETE)) {
            //do something when the order changes to status complete
        }
    }

编辑:在你的 config.xml

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <Gol_Inventory>
            <version>0.1.0</version>
        </Gol_Inventory>
    </modules>        
    <global>        
        <events>
            <sales_order_save_after>
                <observers>
                    <Gol_Inventory_observer>
                        <type>singleton</type>
                        <class>Gol_Inventory_Model_Observer</class>
                        <method>exportEnventory</method>
                    </Gol_Inventory_observer>
                </observers>
            </sales_order_save_after>
        </events>
    </global>
</config>
于 2013-10-14T10:00:54.627 回答