我一直在用我的自定义代码覆盖OnepageController.php(/ app / code / core / Mage / Checkout / controllers)中的saveOrderAction函数。
我已经成功实现了这一逻辑。我相信在此功能开始时,因为尚未完成订单,所以没有订单ID。相反,我可以访问“报价ID”。
我现在需要做的是找出在哪里生成订单的订单ID。我的第一个问题是创建订单ID时最适合覆盖哪个文件/功能?
我的第二个问题是,有没有办法将报价ID链接到生成的订单ID?
本质上,我的目的是获取当前已订购商品的订单ID,以便进行进一步的自定义处理。
我的观察者代码通过以下路径:/ local / James / Aftercheckout
config.xml-/ local / James / Aftercheckout / etc
Observer.php-/ local / James / Aftercheckout / Model
config.xml的内容:
<?xml version="1.0"?>
<config>
<modules>
<James_Aftercheckout>
<version>0.1.0</version>
</James_Aftercheckout>
</modules>
<global>
<events>
<sales_model_service_quote_submit_before>
<observers>
<james_aftercheckout_observer>
<type>singleton</type>
<class>James_Aftercheckout_Model_Observer</class>
<method>test</method>
</james_aftercheckout_observer>
</observers>
</sales_model_service_quote_submit_before>
</events>
</global>
Observer.php的代码:
class James_Aftercheckout_Model_Observer
{
public function test($observer)
{
$quote = $observer->getEvent()->getQuote();
$incrementId = $quote->getReservedOrderId();
$to = "myemail@gmail.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message! .".$incrementId;
$from = "randomemail@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
}
}
回答:
使用此方法在提交订单时创建订单的增量ID Mage_Sales_Model_Service_Quote::submitOrder()
。负责创建的行是$quote->reserveOrderId();
。
如果您想访问它,可以挂接到事件上sales_model_service_quote_submit_before
。
您将可以在观察者中获得增量ID,如下所示:
public function doSomething($observer){//observer for the event
$quote = $observer->getEvent()->getQuote();
$incrementId = $quote->getReservedOrderId();
//do stuff
}