Is there an event for customer account registration in Magento?

后端 未结 17 1868
轻奢々
轻奢々 2020-12-04 17:23

I would like to be able to run some functionality with a module that I am building whenever a customer registers an account, but I can\'t seem to f

相关标签:
17条回答
  • 2020-12-04 17:39

    event name:customer_registration_is_allowed

    I'm not sure if this is you want,you can write a observer to test

    0 讨论(0)
  • 2020-12-04 17:40

    Whenever I'm looking for an event, I'll temporarily edit the Mage.php file to output all the events for a particular request.

    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;
    }
    

    and then perform whatever action it is I'm trying to hook into. Magento events are logically named, so scanning/sorting through the resulting logs usually reveals what I'm after.

    0 讨论(0)
  • 2020-12-04 17:40

    There isn't a direct event for this, but you could use the customer_save_commit_after event. This event also guarantees you that the customer is save in the shop's database. The problem with this event is that is triggered twice. Bellow is an hack that allows you to use this event - the observer function is listed:

    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;
    
    }
    

    Hope this helps someone!

    0 讨论(0)
  • 2020-12-04 17:42

    I'm a bit surprised that none of the answers if solving the case completely.

    Customer create can happen

    1. by url customer/account/create
    2. by register in checkout

    I solved it by tracking two events:

    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>
    

    and in 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;
        }
    

    Edit: I changed

    <controller_action_predispatch_customer_account_createpost>
    

    into

    <controller_action_postdispatch_customer_account_createpost>
    

    because on predispatch the account is not created yet. There can be an error for example if the email already exists in the shop.

    0 讨论(0)
  • 2020-12-04 17:42

    I found the event 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>
    

    In my Observer.php I get the quote object that is passed in.

    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) {        
    }
    

    Do not use $quote->getCheckoutMethod() it gives you login_in instead. Not sure why. Hope this helps.

    0 讨论(0)
  • 2020-12-04 17:43

    I was looking of the same thing. I believe the event is customer_register_success.

    You can find a link for all events at: http://www.nicksays.co.uk/magento_events_cheat_sheet/

    0 讨论(0)
提交回复
热议问题