【问题标题】:Issues setting up a Magento observer module设置 Magento 观察者模块的问题
【发布时间】:2013-10-02 12:01:41
【问题描述】:

我目前正在尝试在 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/等中

<?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)有什么问题?

非常感谢任何帮助!

【问题讨论】:

    标签: php magento magento-1.6 observers


    【解决方案1】:

    要查看所有活动模块,请转至System-&gt;Configuration-&gt;Advanced-&gt;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');
        }
    }
    

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

    希望这会有所帮助。

    【讨论】:

    • 在查看系统日志并遵循您的建议后 - 问题是,虽然我的命名空间是 GiftCheck,但它包含来自“Giftcheck”的文件。整理好之后,效果非常好。
    【解决方案2】:

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

    在 app/code/local/giftCheck/sales/等中

    <?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>
    

    希望这对你有用。

    【讨论】:

    • 很遗憾没有。有没有办法可以检查当前在 Magento 安装中设置了哪些观察者?或者至少查看所有已注册的模块?
    【解决方案3】:

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

    <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";
        }
    }
    

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

    【讨论】:

    • 我已经尝试了所有大小写组合,按照您的建议添加全局,并尝试了 sales/giftCheck_sales/GiftCheck_Sales 的所有变体。然后,我按照您在此处的建议进行了操作,并使用了类名而不是 sales/observer(或 giftCheck_sales/observer),但仍然没有! Magento 真的让我很烦 :)
    • 嗨.. 你的模型目录应该是 "Model" 。不是“模型”和observer.php文件应该是Observer.php('O'->caps)..检查这个..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多