【问题标题】:Magento Observer for Multi Shipping emailsMagento Observer for Multi Shipping 电子邮件
【发布时间】: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-&gt;getShippingAddress()-&gt;format('html'); 因为 $_order = Mage::getModel('sales/order')-&gt;load($_orderID) $data 是空的 arrey
  • 当它是一个简单的结账时 - 我可以通过订单 ID 加载订单。但是当它是一个多地址结帐订单ID为空
  • $emailTemplateVariables['shipping_address'] = $_order->getShippingAddress()->format('html'),见上

标签: magento events checkout observers


【解决方案1】:

我找到了解决这个问题的方法。需要使用checkout_submit_all_after 事件而不是sales_order_place_after

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多