在Magento中创建Hello world事件调度程序(观察者)?

时间:2011-04-20 06:13:27

标签: magento

我正在尝试在Magento中创建一个事件调度程序(应该在产品添加到购物车后调用)。

到目前为止我做了什么:

我用Google搜索并找到this链接。我按照此链接中指定的说明操作。我配置了config.xml文件,并在mymodule / model文件夹下创建了一个Observer.php文件夹。但是,我看不出任何结果。

(我在我的示例中使用的config.xml和Observer.php文件的代码可以在http://goo.gl/O7dBy下找到,我的自定义模块名称是Crossdata,包名是MyModule - 我做错了吗?)

使用简单的helloworld事件调度程序示例的任何其他链接都会有所帮助。

谢谢, 巴兰

3 个答案:

答案 0 :(得分:1)

查看从http://goo.gl/O7dBy下载的代码,您可以定义:

<events>
    <add_to_cart_after>
        <observers>
            <add_to_cart_after>
                <class>dispatcher/observer</class>
                <method>hookToAddToCartAfter</method>
            </add_to_cart_after>
        </observers>
    </add_to_cart_after>
</events>

并将dispatcher的模型别名定义为:

<models>
    <dispatcher>
        <class>MyPackage_Crossdata_Dispatcher_Model</class>
    </dispatcher>
</models>

生成的类名称为MyPackage_Crossdata_Model_Dispatcher_Model_Observer,但您的观察者类名为MyPackage_Crossdata_Dispatcher_Model_Observer,缺少ModelCrossdata之间的Dispatcher

我建议删除上面的整个dispatcher模型定义,并仅使用您已在crossdata中定义的其他模型别名config.xml

<crossdata>
    <class>MyPackage_Crossdata_Model</class>
    <resourceModel>crossdata_mysql4</resourceModel>
</crossdata>   

然后将事件定义更改为:

<add_to_cart_after>
    <class>crossdata/observer</class>
    <method>hookToAddToCartAfter</method>
</add_to_cart_after>

创建一个文件/app/code/local/MyPackage/Crossdata/Model/Observer.php并在其中定义您的观察者类:

class MyPackage_Crossdata_Model_Observer
{
    public function hookToAddToCartAfter($observer)
    {
        // your observer code
    }
}

答案 1 :(得分:0)

您为Observer.php或文件添加了一个文件夹?您可以发布为此编写的代码,以便我们更好地帮助您调试吗?该教程与他们得到的一样简单明了。

答案 2 :(得分:0)

  1. 在您的config.xml中,您的模块和模型的简称是crossdata。但事件使用别名dispatcher/observer,您尚未定义名称dispatcher。这可能需要crossdata/observer

  2. Inchoo示例调用它的模块Inchoo_Dispatcher,模型为Inchoo_Dispatcher_Model_Observer。您的模块为MyPackage_Crossdata,这意味着别名crossdata/observer会尝试加载MyPackage_Crossdata_Model_Observer。但你的观察者被错误地称为MyPackage_Crossdata_Dispatcher_Model_Observer

  3. 如果粘贴的代码未在Stack Overflow中显示,请将其缩进四个空格或使用 {} 按钮对其进行格式化。这是显示代码的首选方式。