我想创建一个事件,以便在订单状态更改为已完成时导出库存。
我创建模块以覆盖 Mage_Sales_Model_Order 并尝试生成事件
(sales_order_status_change)。
当我从magento管理面板查看并订购并更改订单状态以完成时,它的工作意味着在我的扩展类中打印一些东西,它显示,它很好。在这里我生成事件。(问题可能在这里,可能是事件未生成)
我创建了另一个模块来观察此事件。但我无法进入我的Observer课程。我无法打印任何内容并退出,意味着代码无法运行。
但是在同一个观察者类中,如果更改配置并观察其他事件(来自Magento内置事件),它可以工作。就像我测试 catalog_controller_product_view
一样这是我的事件生成器模块。
应用程序的/ etc /模块/ Gol_Eventgenerator.xml
<?xml version="1.0"?>
<config>
<modules>
<Gol_Eventgenerator>
<active>true</active>
<codePool>local</codePool>
</Gol_Eventgenerator>
</modules>
</config>
应用\代码\本地\高尔\ Eventgenerator \等\ 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>
应用\代码\本地\高尔\ Eventgenerator \模型\ 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 /模块/ Gol_Inventory.xml
<?xml version="1.0"?>
<config>
<modules>
<Gol_Inventory>
<active>true</active>
<codePool>local</codePool>
</Gol_Inventory>
</modules>
</config>
应用\代码\本地\高尔\库存\等\ 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>
应用\代码\本地\高尔\库存\模型\ 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新手。
我试图效仿。
答案 0 :(得分: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>