【问题标题】:programmatically mark a shipping email as sent以编程方式将发货电子邮件标记为已发送
【发布时间】:2012-01-24 17:27:43
【问题描述】:

我已经设置了一个观察员,以便在将跟踪号添加到货件后立即发送电子邮件,但我需要能够在管理员中显示电子邮件已发送,而不是显示“发货电子邮件未发送。”

这是我目前使用的代码。它存在一个问题,因为它最终会发送大量电子邮件,就好像它陷入了循环一样。我真的可以使用一些帮助来弄清楚为什么会发生这种情况。

class WR_TrackingEmail_Model_Observer
{
    public function sendTrackEmail($observer)
    {
        $track = $observer->getEvent()->getTrack();
        $shipment = $track->getShipment(true);
        $shipment->sendEmail();
        $shipment->setEmailSent(true);

        $saveTransaction = Mage::getModel('core/resource_transaction')
                       ->addObject($shipment)
                       ->addObject($shipment->getOrder())
                       ->save();
    }
}

【问题讨论】:

  • 你是怎么调用sendTrackEmail函数的?它在循环内吗?循环是否正确退出?
  • 这是一个在 sales_order_shipment_track_save_after 事件上运行的观察者。我上面提供的代码是整个模块中唯一的代码,除了配置文件。我假设在代码的最后 4 行中发生了某种循环,因为当我在没有这 4 行的情况下运行代码时,只发送一封电子邮件,但数据库中未设置“已发送电子邮件”标志。

标签: email magento loops magento-1.4


【解决方案1】:

您正在对货件对象调用save()。 shipping 类有一个_afterSave() 函数,可以触发保存在跟踪对象上。由于您正在为 track_save_after 创建观察者,因此很可能会导致循环。

【讨论】:

  • 那么,为了更新“已发货”标志而不引起循环,我需要做什么?
  • 记录一下,在保存 core/resource_transaction 时,会在 $shipment 对象上调用 save()。它遍历所有添加的对象并单独保存它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
相关资源
最近更新 更多