Php Magento新用户注册-注入自己的代码
我正在尝试在Magento安装和另一个应用程序之间建立松散的连接。特别是,目前我只关心两件事——客户和他们的购买。到目前为止,我编辑的是文件Php Magento新用户注册-注入自己的代码,php,magento,Php,Magento,我正在尝试在Magento安装和另一个应用程序之间建立松散的连接。特别是,目前我只关心两件事——客户和他们的购买。到目前为止,我编辑的是文件app/code/core/Mage/Customer/controllers/AccountController.php——函数createPostAction()被扩充以将客户信息发送到其他应用程序。在success.phtml文件中进行了另一次修改,以便在下订单后发送订单的详细信息 我遇到的问题是,如果用户只是将物品放置在购物车中(作为客人),然后作为
app/code/core/Mage/Customer/controllers/AccountController.php
——函数createPostAction()
被扩充以将客户信息发送到其他应用程序。在success.phtml
文件中进行了另一次修改,以便在下订单后发送订单的详细信息
我遇到的问题是,如果用户只是将物品放置在购物车中(作为客人),然后作为结帐过程的一部分进行注册,那么就永远不会创建第二个应用程序中的客户记录。只有当用户先显式注册,然后单独签出时,它才起作用
我想AccountController.php
可能是要修改以获得所需结果的错误文件,我应该使用哪个文件
编辑:我没有包括代码示例,因为它在很大程度上是不相关的——问题不在于代码,而在于它显然位于错误的位置。哪里是添加新客户注册时应运行的自定义代码的好地方?Anton S是正确的-您应该检查Magento在发生这种情况时是否触发事件。如果是这样,您的代码应该响应该事件
如果不是这样,或者您需要在创建帐户之前运行自定义逻辑,请考虑使用自定义模块:
这将保持原始核心代码的完整性。它本质上告诉Magento使用您的自定义控制器。如果在您的控制器中找不到需要执行的方法,它将使用内核中的代码。Anton S是正确的-发生这种情况时,您应该检查Magento是否正在触发事件。如果是这样,您的代码应该响应该事件
如果不是这样,或者您需要在创建帐户之前运行自定义逻辑,请考虑使用自定义模块:
这将保持原始核心代码的完整性。它本质上告诉Magento使用您的自定义控制器。如果在您的控制器中找不到它需要执行的方法,它将使用内核中的代码。在Magento中干净地执行此操作有点棘手,但可能实现。我不久前也有过同样的任务,并且通过观察者解决了这个问题 首先,您需要创建一个侦听控制器\u操作\u后调度事件的观察者:
<events>
<controller_action_postdispatch>
<observers>
<yourmodule_anything>
<type>singleton</type>
<class>yourmodule/observer</class>
<method>someMethod</method>
</yourmodule_anything>
</observers>
</controller_action_postdispatch>
</events>
独生子女
你的模块/观察员
某种方法
然后在observer方法中,您可以检查动作名称,如下所示
<?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中有点棘手,但可能实现。我不久前也有过同样的任务,并且通过观察者解决了这个问题
首先,您需要创建一个侦听控制器\u操作\u后调度事件的观察者:
<events>
<controller_action_postdispatch>
<observers>
<yourmodule_anything>
<type>singleton</type>
<class>yourmodule/observer</class>
<method>someMethod</method>
</yourmodule_anything>
</observers>
</controller_action_postdispatch>
</events>
独生子女
你的模块/观察员
某种方法
然后在observer方法中,您可以检查动作名称,如下所示
<?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是新手,需要你的建议!编辑核心文件以及修改默认模板(或让它们执行业务逻辑)都是一个大问题,没有代码示例,您的问题实际上是抽象的,因为这是您的代码,而不是每个人都可以观察到的默认代码。问题是在默认代码中添加自定义逻辑的位置注册用户时应该执行什么。我同意核心文件不是一个好地方,但我对magento是新手,需要你的建议!在代码中,您应该只侦听“controller\u action\u postdispatch\u customer\u account\u createpost”事件,而不是系统范围的调度事件。它会减少开销,您可以删除“customer\u account\u createpost”@Lee Saferite的编程检查。是的,您是对的。这只是我模块中的一个片段,我正在检查几个actionsEven。那么,最好使用特定的ActionEvents,而不是全局ActionEvent。否则你的监听器会因为每一个动作而被解雇。同意,这是我的第一个模块,所以我专注于完成任务:)将根据你的建议更新代码,谢谢你的代码你应该只听“控制器\动作\后期调度\客户\帐户\创建后期”事件,而不是系统范围的调度事件。它会减少开销,您可以删除“customer\u account\u createpost”@Lee Saferite的编程检查。是的,您是对的。这只是我模块中的一个片段,我正在检查几个actionsEven。那么,最好使用特定的ActionEvents,而不是全局ActionEvent。否则你的听众会因为每一个动作而被炒鱿鱼。同意,这是我的第一个模块,所以我专注于完成任务:)将根据你的建议更新代码,谢谢