2012-01-26 16 views
2

Magentoのカスタムモジュール作成に関する多くのドキュメントを読みました。私の拳のためにMagentoのオブザーバーパターンを使って私は間違っていますか?

私はModule Creatorを使用してモジュール構造を作成し、しようと、これは私が/app/code/local/Test/MyModule/etc/config.xmlで追加したコードです:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Test_MyModule> 
      <version>0.1.0</version> 
     </Test_MyModule> 
    </modules> 
    <!-- frontend, admin, adminhtml --> 
    <global> 
     <!-- models, resources, blocks, helpers --> 
     <events> 
      <sales_order_place_before> <!-- event i need to catch --> 
      <observers> 
       <trigger_mymodule_placeorder> 
       <type>model</type> 
       <class>test/mymodule/model_observer</class> 
       <method>sendOrder</method> 
       </trigger_mymodule_placeorder> 
      </observers> 
      </sales_order_place_before> 
     </events> 
    </global> 
</config> 

マイ/app/etc/modules/Test_MyModule.xmlファイル:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Test_MyModule> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Test_MyModule> 
    </modules> 
</config> 

そして、これは私の/app/code/local/Test/MyModule/Model/Observer.phpです:

<?php 
class Test_MyModule_Model_Observer 
{ 
    public function sendOrder() 
    { 
     // do something. 
    } 
} 

。 Test_MyModule_Model_Observer :: sendOrder()関数は決して起動されません(関数が実行されるかどうかを調べるために、その内部にダミーのデータベース・ロガーを入れてみました)。

モジュールのconfig.xmlで、メインメニューに新しいリンクが宣言され、リンクが正しく表示された場合(magentoのキャッシュをフラッシュした後)、正しくモジュールがロードされていることが分かりますどこかで行方不明になっている命名規則..どこで?

答えて

3

私には2つの問題がありますが、どちらも関連しています。あなたは、Mage :: getModelが受け入れる構文を使用して使用するクラスを指定していますが、あなたはaです。)b)実際にはモデルが含まれている場所を実際に宣言していないようです。より簡潔にする)。

グローバルノードにモデルを追加する必要があります。

<models> 
    <testmodule> 
     <class>Test_MyModule_Model</class> 
    </testmodule> 
<models> 

testmoduleの部分は、モジュール固有のものであれば何でも構いません。オブザーバーの一部で使用されるクラス値はその後...

<class>testmodule/observer</class> 
+1

となります。また、私はそれが公共の機能sendOrder($オブザーバ)になるので、$オブザーバー引数を受け入れるように)(パブリック関数sendOrderを示唆している –

+0

は必須ではありませんしかし、あなたはそれが正しいと確信しています。 –

+0

は魅力的に働いた! @JevgeniSmirnovはい、あなたが正しいです、実際の関数では、私は関数が何をする必要があるかを観察するために引数を取るでしょう。私が投稿した関数は単なる例であった;) – Strae

関連する問題