在Magento有客户账户注册活动吗?

时间:2010-06-03 17:23:06

标签: php events magento observer-pattern

我希望能够使用module运行某些功能customer registers我正在构建event帐户,但我似乎无法找到任何new customer registrationevent被解雇了。

是否有人知道为此发送的{{1}}?

17 个答案:

答案 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)

如果完全解决这个案子,我有点惊讶没有答案。

客户创造可以发生

  1. by url customer / account / create
  2. 在结帐时注册
  3. 我通过跟踪两个事件来解决它:

    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 !! 开始不推荐使用,但是:

  • 如果我们调用ortodox方法Mage_Checkout_Model_Type_Onepage-&gt; getCheckoutMethod(),等待“METHOD_REGISTER”这样的东西执行:

    if ($this->getCustomerSession()->isLoggedIn()) {
                return self::METHOD_CUSTOMER;
            }

    ...“METHOD_CUSTOMER”是已注册用户结账的名称,不是我们的情况....但是是!,因为....

  • ...注册操作在“checkout_type_onepage_save_order_after”事件之前执行。然后我们现在有一个METHOD_CUSTOMER。 Ups,不一致的东西?

  • 幸运的是,Quote仍保留原始值:CHECKOUT_METHOD_REGISTER

    结帐时注册还有其他想法吗?

  • 答案 6 :(得分:3)

    实际上有customer_save_aftercustomer_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_logincustomer_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

    我不确定你是否想要这个,你可以写一个观察者来测试