我阅读了很多关于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的缓存后),所以我猜问题是函数命名我在某处失踪的惯例..但在哪里?
答案 0 :(得分:3)
我有两个问题,我可以看到,这两个问题都是相关的。您正在使用Mage :: getModel接受的语法指定要使用的类,但您在语法中略有错误,b。)似乎并未实际声明模型的包含位置(除非您将其取出以便更简洁)。
您需要将模型添加到全局节点中。
<models>
<testmodule>
<class>Test_MyModule_Model</class>
</testmodule>
<models>
testmodule部件可以是您喜欢的任何部件,只要它对您的模块而言是独一无二的。然后,观察者部分中使用的类值将变为......
<class>testmodule/observer</class>