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のキャッシュをフラッシュした後)、正しくモジュールがロードされていることが分かりますどこかで行方不明になっている命名規則..どこで?
となります。また、私はそれが公共の機能sendOrder($オブザーバ)になるので、$オブザーバー引数を受け入れるように)(パブリック関数sendOrderを示唆している –
は必須ではありませんしかし、あなたはそれが正しいと確信しています。 –
は魅力的に働いた! @JevgeniSmirnovはい、あなたが正しいです、実際の関数では、私は関数が何をする必要があるかを観察するために引数を取るでしょう。私が投稿した関数は単なる例であった;) – Strae