Magento新用户注册 - 注入自己的代码

时间:2011-09-19 13:59:33

标签: php magento

我正在尝试在Magento安装和另一个应用程序之间建立松散的连接。特别是,我现在只关心两件事 - 顾客和他们的购买。到目前为止我编辑的是文件app/code/core/Mage/Customer/controllers/AccountController.php - 函数createPostAction()被扩充以将客户的信息发送到另一个应用程序。在success.phtml文件中进行了另一项修改,以便在订单放置后发送订单的详细信息。

我遇到的问题是,如果用户只是将项目放在购物车中(作为访客),然后在结帐过程中注册,则永远不会创建第二个应用程序中的客户记录。它仅在用户首先明确注册,然后单独签出时才有效。

我认为AccountController.php可能是错误的文件要修改以实现我想要的结果,我应该使用哪个文件?

编辑:我不包括代码示例,因为它在很大程度上是不相关的 - 问题不在于代码,而在于它显然是在错误的地方。添加自定义代码的好地方应该在新客户注册时运行?

2 个答案:

答案 0 :(得分:3)

在Magento干净地做这件事有点棘手但有可能实现。我刚才有同样的任务,用观察员解决了

首先,您需要创建一个侦听controller_action_postdispatch事件的观察者:

<events>
    <controller_action_postdispatch>
        <observers>
            <yourmodule_anything>
                <type>singleton</type>
                <class>yourmodule/observer</class>
                <method>someMethod</method>
            </yourmodule_anything>
        </observers>
    </controller_action_postdispatch>
</events>

然后在您的观察者方法中,您可以按如下方式检查动作名称

<?php
$action = $observer->getEvent()->getControllerAction();
if ($action->getFullActionName() == 'customer_account_createpost') {
    if (Mage::getSingleton('customer/session')->isLoggedIn()) { // this check allows to determine if customer session was created which means successfull registration
    }
}

可以为结帐注册做类似的事情。一般来说,观察者是扩展Magento功能的好方法。详细了解他们here

答案 1 :(得分:1)

Anton S是对的 - 当发生这种情况时,你应该检查Magento是否正在发射一个事件。如果是这样,您的代码应该响应该事件。

如果不是这种情况,或者您需要在创建帐户之前运行自定义逻辑,请考虑使用自定义模块覆盖/重载控制器:http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller

这使原始核心代码保持不变。它实质上告诉Magento使用您的自定义控制器。如果在控制器中找不到它需要执行的方法,它将使用核心代码。