2012-01-24 12 views
0

トラッキング番号が貨物に追加されるとすぐに電子メールを送信するようにオブザーバーを設定しましたが、メールにある管理者にどのように表示する必要があります「発送メールは送信されません」と表示される代わりに送信されました。はプログラムで送信メールを送信済みとしてマークする

ここに私が現在使用しているコードがあります。あたかもどのようにループに詰まっているかのように、大量の電子メールを送信する方法がいくつかあるので、問題があります。私は実際になぜこれが起こっているのかを理解するのに役立つことができます。

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(); 
    } 
} 
+0

どのように 'sendTrackEmail'関数を呼びますか?それはループの中にありますか?ループは正常に終了しますか? – Moon

+0

これは、sales_order_shipment_track_save_afterイベントで実行されているオブザーバです。上記で提供したコードは、configファイル以外にモジュール全体の唯一のコードです。私は、コードの最後の4行に何らかのループが発生していると仮定しています。その4行を除いてコードを実行すると、1つの電子メールのみが送信されますが、 "送信された電子メール"フラグはdbに設定されません。 – Jen

答えて

1

出荷対象物にはsave()が呼び出されています。出荷クラスには、_afterSave()関数があり、トラックオブジェクトに保存をトリガーします。 track_save_afterのオブザーバを作成しているので、ループが発生する可能性が非常に高いです。

+0

それでは、ループを起こすことなく「出荷されました」フラグを更新するには、何をする必要がありますか? – Jen

+0

レコードの場合、core/resource_transactionが保存されたときに、$ shipmentオブジェクトに対してsave()が呼び出されます。追加されたすべてのオブジェクトを繰り返し処理し、個別に保存します。 –

+0

この問題を解決するために何をする必要があるのか​​まだ分かりません... – Jen

関連する問題