如果您要覆盖该send
函数,您可以使用它的参数$variables
,一个数组,其中包含一个order
对象($variables['order']
)等数据。这适用于订单电子邮件、发票、装运和 creditmemo 电子邮件。
这使我的“注册订单”的建议变得多余。
首先想到的是捕获下订单时调度的事件,并将订单对象从事件保存到 Magento 注册表中。然后,您可以从覆盖的send
函数中获取该注册表项。假设 SMS 是在提交订单的请求期间发送的,而不是稍后发送,例如从队列处理器分派 SMS 时,这应该可以工作。
所以这个想法可以这样实现:
注册观察者
<config>
<!-- -->
<global>
<!-- -->
<events>
<sales_order_place_after>
<observers>
<yournodename>
<class>YourPackage_YourModule_Model_Observer</class>
<method>registerOrder</method>
</yournodename>
</observers>
</sales_order_place_after>
</events>
<!-- -->
</global>
<!-- -->
</config>
实现观察者
class YourPackage_YourModule_Model_Observer
{
public function registerOrder(Varien_Event_Observer $observer)
{
$order = $observer->getEvent()->getOrder();
Mage::register('currentOrder', $order);
}
}
访问注册表项:
public function send()
{
$order = Mage::registry('currentOrder');
if ($order instanceof Mage_Sales_Model_Order) {
$address = $order->getBillingAddress();
if (!$order->getCustomerId()) {
//guest order
} else {
$customer = Mage::getModel('customer/customer')
->load($order->getCustomerId());
}
}
}