我正在尝试在Magento安装和另一个应用程序之间建立松散的连接。特别是,我现在只关心两件事 - 顾客和他们的购买。到目前为止我编辑的是文件app/code/core/Mage/Customer/controllers/AccountController.php
- 函数createPostAction()
被扩充以将客户的信息发送到另一个应用程序。在success.phtml
文件中进行了另一项修改,以便在订单放置后发送订单的详细信息。
我遇到的问题是,如果用户只是将项目放在购物车中(作为访客),然后在结帐过程中注册,则永远不会创建第二个应用程序中的客户记录。它仅在用户首先明确注册,然后单独签出时才有效。
我认为AccountController.php
可能是错误的文件要修改以实现我想要的结果,我应该使用哪个文件?
编辑:我不包括代码示例,因为它在很大程度上是不相关的 - 问题不在于代码,而在于它显然是在错误的地方。添加自定义代码的好地方应该在新客户注册时运行?
答案 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使用您的自定义控制器。如果在控制器中找不到它需要执行的方法,它将使用核心代码。