2012-01-10 5 views
3

注文が出荷されてマークされ、追跡番号が与えられたときにトリガされるマゼンタのオブザーバを作成しようとしています。カスタムオブザーバがトリガされていない

私は管理者を経由して注文し、請求書を出してから、私が電話する必要のある機能を出荷することは決して実際には呼び出されません。理由はわかりません。

私は私が間違っているかもしれないものを見るためにMagentoのウェブサイト上のページののカップルを通過しているが、私はちょうど(http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_method & http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-2-the-magento-config)それを把握するカント。

管理アドバンス領域内にモジュールが表示され、有効になっています。

誰かが私が付いているコードを見て、私の問題がどこにあるのか教えていただければ幸いです。ここで

アプリ/コード/ローカル/ WRに位置している私のObserverクラスです/ TrackingEmail /モデル/ Observer.phpここ

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

あるモジュールのための私のconfig.xml

<config> 
    <global> 
     <modules> 
      <wr_trackingemail> 
       <version>0.1.1</version> 
      </wr_trackingemail> 
     </modules> 
     <events> 
      <sales_order_shipment_track_save_after> 
       <observers> 
        <Wr_trackingemail_model_observer> 
         <type>singleton</type> 
         <class>WR_TrackingEmail_Model_Observer</class> 
         <method>sendTrackEmail</method> 
        </Wr_trackingemail_model_observer> 
       </observers> 
      </sales_order_shipment_track_save_after> 
     </events> 
    </global> 
</config> 
ここ

は、あなたがの下にモジュールを登録している私のアプリの/ etc /モジュール/ WR_TrackingEmail.xml

<config> 
    <modules> 
     <WR_TrackingEmail> 
      <active>true</active> 
      <codePool>local</codePool> 
     </WR_TrackingEmail> 
    </modules> 
</config> 
+0

の ''ノードは決して評価されませんが、何も悪影響を及ぼしません。 – benmarks

+0

何が終わったのですか? –

答えて

11

あなたの文の「トリガされていないカスタム観察者は」解釈の余地を残します。チェックしたいものは次のとおりです。

あなたのオブザーバは正しく設定されているようです(ただし、モジュールタグはグローバルタグの外にありますが、このケースでは問題はありません)。あなたは

Mage::dispatchEvent('sales_order_shipment_track_save_after'); 

(Magentoのスクリプト、または他のブートストラップ、イベントロード)空白のコントローラのアクションから次のコードを自分で実行して、セットアップをテストしてから実行した場合、この

public function sendTrackEmail($observer) 
{ 
    exit(__METHOD__); 
} 

であなたのsendTrackEmailを置き換えることができますテキストで停止する

WR_TrackingEmail_Model_Observer::sendTrackEmail 

イベントが正しく設定されていることがわかります。

イベントが正しく設定されている場合、次の手順は、上記の手順を実行するときにイベントが実際に起動されていることを確認することです。あなたはまた、あなたのイベントが発生している場合は、上記の中で、あなたの出口を出ることはまだ実行停止につながることを良いチャンスがあります

public static function dispatchEvent($name, array $data = array()) 
{ 
    //brain dead logging 
    file_put_contents('/tmp/events.log',"$name\n",FILE_APPEND); 
    Varien_Profiler::start('DISPATCH EVENT:'.$name); 
    $result = self::app()->dispatchEvent($name, $data); 
    #$result = self::registry('events')->dispatch($name, $data); 
    Varien_Profiler::stop('DISPATCH EVENT:'.$name); 
    return $result; 
} 

この一時的なログコードを追加することにより、 app/Mage.phpでこれらのイベントをログに記録することができます。

あなたのオブザーバーが正しく構成されていると判断し、イベントが発生している場合は、イベントはトリガーされていませんが、オブザーバーのコードは自分の思う通りのことをしません。あなたのコードを再度追加けど、あなたのオブザーバーコードをテストするために何度も何度も、ブラウザをリロードすることができます

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

この場所

であなたの出口を保ちます。がんばろう!

1

ですファイルの.xmlの3210?

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Wr_Trackingemail> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Wr_Trackingemail> 
    </modules> 
</config> 
+0

はい、あります。私は既にあなたが持っていたものに問題があった場合にあなたの例を使用しました。まだ動作していません... – Jen

+0

エラーが発生しました(修正済み)。あなたは設定キャッシュをクリアしましたか?イベントがコアで実行された後、シンプルな 'die;'を追加しましたか?また、オブザーバーに 'die;'を追加して、アプリケーションがインスタンス化しているかどうかを判断しましたか? – benmarks

関連する問題