【发布时间】:2014-05-22 14:37:16
【问题描述】:
我在下订单后使用 Magento 发送电子邮件时遇到了一些困难。我需要将自定义电子邮件发送到自定义地址。我为sales_order_place_after 创建了 Observer,它运行良好,但是当我对多个地址使用结帐时,我遇到了错误。
这是我的观察员:
public function sendMail($observer)
{
/* Get Order ID by Observer */
$_orderID = $observer->getOrder()->getID();
/* Load $order by Order ID */
$_order = Mage::getModel('sales/order')->load($_orderID);
try {
/* Load Email Template by template name */
$emailTemplate = Mage::getModel('core/email_template');
$emailTemplate->loadDefault('send_mail');
$emailTemplate->setTemplateSubject('SITE.COM: You Have New Order');
$salesData['email'] = 'example@site.com';
$salesData['name'] = Mage::getStoreConfig('trans_email/ident_general/name');
/* Set Sender name and email by General email */
$emailTemplate->setSenderName($salesData['name']);
$emailTemplate->setSenderEmail($salesData['email']);
/* Create email template by Order data */
$emailTemplateVariables['username'] = $_order->getCustomerName();
$emailTemplateVariables['shipping_address'] = $_order->getShippingAddress()->format('html');
$emailTemplateVariables['shipping_description'] = $_order->getShippingDescription();
$emailTemplateVariables['order_id'] = $_order->getIncrementId();
$emailTemplateVariables['creating_time'] = $_order->getCreatedAtFormated('long');
$emailTemplateVariables['is_not_virtual'] = $_order->getIsNotVirtual();
$emailTemplateVariables['store_name'] = $_order->getStoreName();
$emailTemplateVariables['store_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
$emailTemplateVariables['order'] = $_order;
/* Send email, when order was placed */
$emailTemplate->setType('html');
$emailTemplate->send($salesData['email'], $_order->getStoreName(), $emailTemplateVariables);
/* Add Success Message to system.log if email was sent */
Mage::log('Success! Email was sent.');
} catch (Exception $e) {
/* Add error message to system.log if email wasn't sent */
Mage::logException($e);
}
return $this;
}
和config.xml:
<events>
<sales_order_place_after>
<observers>
<sendmail>
<type>singleton</type>
<class>Custom_SendMail_Model_Order_Observer</class>
<method>sendMail</method>
</sendmail>
</observers>
</sales_order_place_after>
</events>
<template>
<email>
<send_mail translate="label">
<label>New Order for Dropshippers</label>
<file>sales/order_dropship.html</file>
<type>html</type>
</send_mail>
</email>
</template>
谢谢!
【问题讨论】:
-
请同时发布错误日志。
-
Fatal error: Call to in local.site.com\app\code\local\Custom\SendMail\Model\Order\Observer.php on line 47。第 47 行是$emailTemplateVariables['shipping_address'] = $_order->getShippingAddress()->format('html');因为$_order = Mage::getModel('sales/order')->load($_orderID)$data 是空的 arrey -
当它是一个简单的结账时 - 我可以通过订单 ID 加载订单。但是当它是一个多地址结帐订单ID为空
-
$emailTemplateVariables['shipping_address'] = $_order->getShippingAddress()->format('html'),见上
标签: magento events checkout observers