Есть ли событие для регистрации учетной записи клиента в Magento? - PullRequest
15 голосов
/ 03 июня 2010

Я хотел бы иметь возможность запускать некоторые функции с module, который я создаю при каждом customer registers аккаунте, но я не могу найти ни одного event, который срабатывает на new customer registration ,

Кто-нибудь знает о event, который отправляется для этого?

Ответы [ 17 ]

44 голосов
/ 03 июня 2010

Всякий раз, когда я ищу событие, я временно редактирую файл 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 имеют логическое название, поэтому сканирование / сортировка получаемых журналов обычно показывает, что я ищу.

19 голосов
/ 02 октября 2012

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>
16 голосов
/ 15 октября 2010

Я обнаружил, как достичь этого сегодня. Он включает в себя использование одного из общих событий контроллера. Этот узел в 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.

7 голосов
/ 23 сентября 2015

Я немного удивлен, что ни один из ответов, если полностью решить дело.

Создание клиента может произойти

  1. по URL клиента / аккаунта / создать
  2. по регистрации в кассе

Я решил это, отследив два события:

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>

потому что при предварительной отправке учетная запись еще не создана. Может быть ошибка, например, если электронная почта уже существует в магазине.

5 голосов
/ 01 августа 2011

Для этого нет прямого события, но вы можете использовать событие customer_save_commit_after . Это событие также гарантирует вам, что клиент будет сохранен в базе данных магазина. Проблема с этим событием в том, что срабатывает дважды. Сильфон - это хак, который позволяет вам использовать это событие - в списке есть функция наблюдателя:

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;

}

Надеюсь, это кому-нибудь поможет!

4 голосов
/ 03 марта 2011

Вы также должны учитывать, когда пользователь регистрируется на лету при оформлении заказа: a Зарегистрироваться на chekout. Думая об этом случае, вы можете поймать событие "checkout_type_onepage_save_order_after" с вашим собственным классом Observer, а затем с этим кодом ...


if($observer->getEvent()->getQuote()->getCheckoutMethod(true) == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER){
    (...)
}

Кто-нибудь может сказать: Mage_Sales_Model_Quote-> getCheckoutMethod () устарела с версии 1.4 !! , но:

Если мы вызываем метод ortodox Mage_Checkout_Model_Type_Onepage-> getCheckoutMethod (), ожидая что-то как «METHOD_REGISTER», это выполняется:
if ($this->getCustomerSession()->isLoggedIn()) {
            return self::METHOD_CUSTOMER;
        }

... "METHOD_CUSTOMER" - это имя для проверки с уже зарегистрированным пользователем, а не в нашем случае .... но да !, потому что ....

... операция регистрации выполняется до события "checkout_type_onepage_save_order_after". Тогда у нас есть METHOD_CUSTOMER сейчас. Упс, что-то противоречивое?

К счастью, цитата остается с исходным значением: CHECKOUT_METHOD_REGISTER

Есть еще идеи для регистрации на кассе?

3 голосов
/ 24 августа 2011

На самом деле есть customer_save_after и customer_save_before (magento 1.5)

Если вы хотите оперативно изменять некоторые данные после публикации формы, выберите customer_save_before, измените нужные данные, и все (действие после сохранения наступит, поэтому ваше изменение будет учтено).

$customer->save() просто не работает в customer_save_after. (фатальная ошибка) Используйте этот обозреватель для запуска кода после создания клиента, который НЕ связан с данными клиента.

Надеюсь, это поможет!

3 голосов
/ 09 июля 2013

customer_register_success

adminhtml_customer_save_after

эти два события по умолчанию, когда клиент вставляется в базу данных .... Первое событие запускается в веб-интерфейсе, когда пользователь регистрируется, и второе событие запускается в бэкэнде, когда клиент создается через панель администратора ... Я надеюсь, вы знаете, как зарегистрировать наблюдателя для события ... надеюсь, это поможет вам ...

3 голосов
/ 15 июля 2010

Вы можете попробовать customer_save_after, единственное, что при регистрации отправляет это событие дважды

2 голосов
/ 18 июля 2013

Я нашел событие 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-> getCheckoutMethod (), вместо этого он дает вам login_in. Не уверен почему. Надеюсь, это поможет.

...