我希望能够使用module
运行某些功能customer registers
我正在构建event
帐户,但我似乎无法找到任何new customer registration
在event
被解雇了。
是否有人知道为此发送的{{1}}?
答案 0 :(得分:44)
每当我正在寻找一个事件时,我会暂时编辑Mage.php
文件以输出特定请求的所有事件。
File: app/Mage.php
public static function dispatchEvent($name, array $data = array())
{
Mage::log('Event: ' . $name); //not using Mage::log, as
//file_put_contents('/tmp/test.log','Dispatching '. $name. "\n",FILE_APPEND); //poor man's log
Varien_Profiler::start('DISPATCH EVENT:'.$name);
$result = self::app()->dispatchEvent($name, $data);
#$result = self::registry('events')->dispatch($name, $data);
Varien_Profiler::stop('DISPATCH EVENT:'.$name);
return $result;
}
然后执行我正试图加入的任何动作。 Magento事件在逻辑上被命名,因此通过生成的日志进行扫描/排序通常会揭示我所追求的内容。
答案 1 :(得分:19)
customer_register_success是您正在寻找的:
<config>
<frontend>
<events>
<customer_register_success>
<observers>
<your_module>
<type>singleton</type>
<class>your_module/observer</class>
<method>yourMethod</method>
</your_module>
</observers>
</customer_register_success>
</events>
</frontend>
</config>
答案 2 :(得分:16)
我今天发现了如何实现这一目标。它涉及使用其中一个通用控制器事件。 config.xml
中的此节点将挂钩到正确的事件:
<events>
....
<controller_action_postdispatch_customer_account_createPost>
<observers>
<your_module_here>...etc
为每个扩展controller_action_postdispatch_REQUESTPATH
的控制器(基本上都是所有控制器)抛出Mage_Core_Controller_Front_Action
事件,这使得它很容易被定位。同上controller_action_predispatch_REQUESTPATH
。
答案 3 :(得分:7)
如果完全解决这个案子,我有点惊讶没有答案。
客户创造可以发生
我通过跟踪两个事件来解决它:
config.xml中
<events>
<controller_action_postdispatch_customer_account_createpost>
<observers>
<myextensionkey_create_account>
<class>myextensionkey/observer</class>
<method>createAccount</method>
<type>singleton</type>
</myextensionkey_create_account>
</observers>
</controller_action_postdispatch_customer_account_createpost>
<checkout_submit_all_after>
<observers>
<myextensionkey_checkout_create_account>
<class>myextensionkey/observer</class>
<method>createAccountCheckout</method>
<type>singleton</type>
</myextensionkey_checkout_create_account>
</observers>
</checkout_submit_all_after>
</events>
和Observer.php
public function createAccount($observer) { ... } //Nothing special here
public function createAccountCheckout($observer) {
if ($observer->getQuote()->getData('checkout_method') != Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER) {
return;
}
编辑:我改变了
<controller_action_predispatch_customer_account_createpost>
到
<controller_action_postdispatch_customer_account_createpost>
因为在predispatch上尚未创建帐户。例如,如果商店中已存在电子邮件,则可能会出现错误。
答案 4 :(得分:5)
此事件没有直接事件,但您可以使用 customer_save_commit_after 事件。此事件还可以保证客户保存在商店的数据库中。此事件的问题是触发两次。 Bellow是一个允许你使用此事件的hack - 列出了观察者功能:
public function customer_save_commit_after($p_oObserver) {
$l_oCustomer = $p_oObserver->getCustomer();
if ($l_oCustomer->isObjectNew() && !$l_oCustomer->getMyCustomKeyForIsAlreadyProcessed()) {
$l_oCustomer->setMyCustomKeyForIsAlreadyProcessed(true);
// new customer
}
else {
// existing customer
}
return false;
}
希望这有助于某人!
答案 5 :(得分:4)
当用户在结账时即时注册时,您还必须考虑:在chekout上注册。考虑到这种情况,您可以使用自己的Observer类捕获“checkout_type_onepage_save_order_after”事件,然后使用此代码......
if($observer->getEvent()->getQuote()->getCheckoutMethod(true) == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER){
(...)
}
任何人都可以说: Mage_Sales_Model_Quote-&gt; getCheckoutMethod()从1.4 !! 开始不推荐使用,但是:
if ($this->getCustomerSession()->isLoggedIn()) {
return self::METHOD_CUSTOMER;
}
...“METHOD_CUSTOMER”是已注册用户结账的名称,不是我们的情况....但是是!,因为....
结帐时注册还有其他想法吗?
答案 6 :(得分:3)
实际上有customer_save_after
和customer_save_before
(magento 1.5)
如果您希望在表单发布后即时修改某些数据,请选择customer_save_before
,更改您想要的数据以及所有数据(之后的保存操作,因此您的更改将被考虑在内) 。
$customer->save()
仅在customer_save_after
中无效。 (致命错误)使用此观察者在客户创建后运行与客户数据无关的代码。
希望有所帮助!
答案 7 :(得分:3)
customer_register_success
adminhtml_customer_save_after
这两个是客户插入数据库时的默认事件.... 当用户通过管理面板创建客户时,当用户注册并在后端触发第二个事件时,第一个事件会在前端触发...我希望您知道如何为事件注册观察者...希望这会对您有所帮助......
答案 8 :(得分:3)
您可以尝试使用customer_save_after,这是注册唯一两次发送此事件的内容
答案 9 :(得分:2)
customer_register_success
。
您可以在以下位置找到所有活动的链接: http://www.nicksays.co.uk/magento_events_cheat_sheet/
答案 10 :(得分:2)
我发现了事件checkout_submit_all_after。
<checkout_submit_all_after>
<observers>
<my_example>
<class>my_example/observer</class>
<method>customerRegistered</method>
</my_example>
</observers>
</checkout_submit_all_after>
在我的Observer.php中,我得到了传入的引用对象。
public function customerRegistered (Varien_Event_Observer $observer) {
$quote = $observer->getQuote();
$checkout_method = $quote->getData();
$checkout_method = $checkout_method['checkout_method'];
if ($checkout_method == Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER) {
}
不要使用$ quote-&gt; getCheckoutMethod()它会为您提供login_in。不知道为什么。希望这会有所帮助。
答案 11 :(得分:1)
我发现customer_login
和customer_session_init
事件都是在创建帐户时抛出的。您可以为 注册一个监听器,然后检查该帐户上的创建日期?
答案 12 :(得分:0)
您可以使用customer_register_success事件。在客户成功创建后触发。这是事件备忘单的链接。希望它也能帮到你。
http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/
答案 13 :(得分:0)
这个问题的答案是没有事件发生。
答案 14 :(得分:0)
customer_register_success
是成功注册客户后发送的事件
这里来自 magento 1.8 中Mage/Customer/controllers/AccountController.php
:: 454 的代码:
protected function _dispatchRegisterSuccess($customer)
{
Mage::dispatchEvent('customer_register_success',
array('account_controller' => $this, 'customer' => $customer)
);
}
答案 15 :(得分:-1)
customer_save_after
是在新的customer registration
之后调用的事件。
在此处阅读所有events
:
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/events
答案 16 :(得分:-3)
事件名称:customer_registration_is_allowed
我不确定你是否想要这个,你可以写一个观察者来测试