0

我目前正在尝试在 Magento 社区 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)有什么问题?

任何帮助是极大的赞赏!

4

3 回答 3

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');
    }
}

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

希望这可以帮助。

于 2013-10-03T02:30:11.203 回答
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>

希望这对你有用。

于 2013-10-02T12:12:12.453 回答
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";
    }
}

就是这样..!!如果使用此代码有任何问题,请告诉我..!!

于 2013-10-02T12:12:44.997 回答