Есть ли событие для регистрации учетной записи в Magento?

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

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

Ответы

Ответ 1

Ответ на этот вопрос заключается в том, что для этого нет события.

Ответ 2

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

Ответ 3

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>

Ответ 4

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

Ответ 5

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

Возможно создание клиента

  • по URL-адресу клиента/учетной записи/создать
  • зарегистрировать в кассе

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

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>

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

Ответ 6

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

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;

}

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

Ответ 7

Вы также должны учитывать, когда пользователь регистрируется на вылет на кассе: регистр на 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. Ups, что-то непоследовательное?

Fortunatly, Цитата остается с исходным значением: CHECKOUT_METHOD_REGISTER

Любая другая идея для регистрации при оформлении заказа?

Ответ 8

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

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

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

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

Ответ 9

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

Ответ 10

Я смотрел то же самое. Я считаю, что событие customer_register_success.

Вы можете найти ссылку для всех событий по адресу: http://www.nicksays.co.uk/magento_events_cheat_sheet/

Ответ 11

customer_register_success

adminhtml_customer_save_after

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

Ответ 12

Я нашел событие 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 я получаю объект quote, который передается.

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. Не знаю, почему. Надеюсь, это поможет.

Ответ 13

Я обнаружил, что события customer_login и customer_session_init выставляются при создании учетной записи. Вы можете зарегистрировать прослушиватель для либо, а затем проверить, чтобы увидеть дату создания в учетной записи?

Ответ 14

Вы можете использовать событие customer_register_success. Он запускается после успешного создания клиента. Вот ссылка обмана. Надеюсь, это также поможет вам.

http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/

Ответ 15

customer_register_success - это событие, отправленное после успешной регистрации клиента.
Здесь из кода Mage/Customer/controllers/AccountController.php:: 454 в magento 1.8:

protected function _dispatchRegisterSuccess($customer)
{
    Mage::dispatchEvent('customer_register_success',
        array('account_controller' => $this, 'customer' => $customer)
    );
}

Ответ 17

имя события: customer_registration_is_allowed

Я не уверен, что это вы хотите, вы можете написать наблюдателю для тестирования