我正在尝试在Magento中设置一个事件观察器。我正在观察的事件被触发,但似乎我的方法无法运行。我的模块已注册,一切正常。
这是定义观察者的配置.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<global>
<models>
<technoberglink>
<class>
Technoberg_Link_Model
</class>
</technoberglink>
</models>
</global>
<frontend>
<events>
<cms_page_render><!-- sales order place after -->
<observers>
<Technoberg_Link_Observer>
<type>
singleton
</type>
<class>
Technoberg_Link_Model_Observer
</class>
<method>
start_link
</method>
</Technoberg_Link_Observer>
</observers>
</cms_page_render>
</events>
</frontend>
</config>
现在我确实知道该事件已触发,因为如果我将Technoberg_Link_Model_Observer类更改为其他类,则会记录一些错误,指出找不到该文件。
这是我的观察者.php文件
class Technoberg_Link_Model_Observer {
function __construct(){
}
public function start_link($e){
Mage::log("Dummy code executed");
return $this;
}
}
我不知道为什么我的方法没有执行,所以任何帮助都会很棒!
我修复了它。我检查了所有不是问题的空格。
我将事件放在全局下,并将观察器中的标签更改为与我正在使用的类相同的名称 。这解决了问题。所以XML将是
<global>
<events>
<cms_page_render>
<observers>
<Technoberg_Link_Model_Observer> <!-- TAG INSIDE OBSERVER -->
<type>singleton</type>
<class>Technoberg_Link_Model_Observer</class>
<method>start_link</method>
</Technoberg_Link_Observer>
</observers>
</cms_page_render>
</events>
</global>
我想Magento在他们的命名约定方面非常严格=)感谢您的帮助!
<events>
<cms_page_render><!-- sales order place after -->
<observers>
<Technoberg_Link_Observer>
<type>
singleton
</type>
<class>
Technoberg_Link_Model_Observer
</class>
<method>
start_link
</method>
</Technoberg_Link_Observer>
</observers>
</cms_page_render>
</events>
将 XML 的这一部分写入其中
<global> </global>
标记而不是前端标记
清除缓存并重新加载
尝试以下配置.xml...我认为这是一个空白问题...
<?xml version="1.0" encoding="UTF-8"?>
<config>
<global>
<models>
<technoberglink>
<class>Technoberg_Link_Model</class>
</technoberglink>
</models>
</global>
<frontend>
<events>
<cms_page_render>
<observers>
<technoberglink>
<type>singleton</type>
<class>Technoberg_Link_Model_Observer</class>
<method>start_link</method>
</technoberglink>
</observers>
</cms_page_render>
</events>
</frontend>
</config>