设置Magento观察者模块的问题

时间:2013-10-02 12:01:42

标签: php magento magento-1.6 observers

我目前正在尝试在Magento Community 1.6.2.0上添加观察者

我正在尝试向 checkout_onepage_controller_success_action 添加观察者,以检查订购产品的SKU并执行其他代码,如果SKU正确,则会创建并通过电子邮件发送优惠券代码。

我可以在另一个页面上测试时正确创建并通过电子邮件发送代码,但是每次尝试将方法设置为观察者都失败了,没有任何解释。

app / etc / modules / giftCheck_sales.xml

中的

<?xml version="1.0"?>
<config>
    <modules>
        <giftCheck_sales>
            <active>true</active>
            <codePool>local</codePool>
        </giftCheck_sales>
    </modules>
</config>
app / code / local / giftCheck / sales / etc

中的

<?xml version="1.0"?>
<config>
    <frontend>
        <events>
            <checkout_onepage_controller_success_action>
                <observers>
                    <giftCheck_sales>
                        <type>singleton</type>
                        <class>giftCheck_sales/observer</class>
                        <method>exportOrder</method>
                    </giftCheck_sales>
                </observers>
            </checkout_onepage_controller_success_action>
        </events>
    </frontend>
</config>
app / code / local / giftCheck / sales / models / observer.php 中的

class giftCheck_sales_Model_Observer
{
    public function exportOrder(Varien_Event_Observer $observer)
    {
        die('test');
    }
}

我的问题是无论我做什么,我都无法让这些观察者工作。无论我在观察者中放置什么代码,它都永远不会被执行。

我设置这个观察者的方式是什么(我假设我的XML)?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

要查看所有活动模块,请转至System->Configuration->Advanced->Advanced。如果模块没有出现在该列表中,那么Magento不知道您的模块是否存在。

就你的代码而言,我没有特别使用Magento 1.6.2.0,但我可以看到一些可能导致你麻烦的事情。其中首先是您的命名空间和模块名称。这些应始终以大写字母开头:

app/etc/modules/Giftcheck_Sales.xml
app/code/local/Giftcheck/Sales/

当然,Giftcheck_Sales.xml应该是这样的:

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

我看到的另一个问题是你没有告诉Magento在哪里可以找到你的模型。套管也存在一些问题。

您的配置应如下所示:

<?xml version="1.0"?>
<config>
    <global>
        <models>
            <giftcheck_sales>
                <class>Giftcheck_Sales_Model</class>
            </giftcheck_sales>
        </models>
    </global>
    <frontend>
        <events>
            <checkout_onepage_controller_success_action>
                <observers>
                    <giftcheck_sales>
                        <class>giftcheck_sales/observer</class>
                        <method>exportOrder</method>
                    </giftcheck_sales>
                </observers>
            </checkout_onepage_controller_success_action>
        </events>
    </frontend>
</config>

您的目录结构似乎也存在问题。

app/code/local/giftCheck/sales/models/observer.php

应该是:

app/code/local/Giftcheck/Sales/Model/Observer.php

该文件的内容应如下所示:

class Giftcheck_Sales_Model_Observer
{
    public function exportOrder(Varien_Event_Observer $observer)
    {
        die('test');
    }
}

不要忘记更正观察者类名的大小。

希望这有帮助。

答案 1 :(得分:0)

这里有一些修正我可以给你添加你的config.xml 可能是由于区分大小写的问题,您无法致电您的观察员

app / code / local / giftCheck / sales / etc

中的

<?xml version="1.0"?>
<config>
    <frontend>
        <events>
            <checkout_onepage_controller_success_action>
                <observers>
                    <giftcheck_sales>
                        <type>singleton</type>
                        <class>giftcheck_sales/observer</class>
                        <method>exportOrder</method>
                    </giftcheck_sales>
                </observers>
            </checkout_onepage_controller_success_action>
        </events>
    </frontend>
</config>

希望这对您有用。

答案 2 :(得分:0)

你配置错了。你的代码应该是这样的,

<config>
    <frontend>
    <global>
        <events>   
            <checkout_onepage_controller_success_action>
                  <observers>
                     <GiftCheck_Sales>
                <type>singleton</type>
                            <class>GiftCheck_Sales_Model_Observer</class>
                            <method>exportOrder</method>
                      </GiftCheck_Sales>
                  </observers>
             </checkout_onepage_controller_success_action>
        </events>
       </global>
  </frontend>
</config>

你错过了全局标记。你的观察者类应该是这样的,

class GiftCheck_Sales_Model_Observer
{
    public function exportOrder(Varien_Event_Observer $observer)
    {
       echo "test";
    }
}

多数民众赞成.. !!让我知道如果使用此代码有任何问题.. !!