Я хотел бы иметь возможность запускать некоторые функции с module
который я создаю, когда customer registers
учетную запись, но я не могу найти какое-либо event
которое будет запущено при new customer registration
.
Кто-нибудь знает о event
, которое отправлено для этого?
Всякий раз, когда я ищу событие, я временно отредактирую файл 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 логически называются, поэтому сканирование / сортировка по результирующим журналам обычно показывает, что мне нужно.
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>
Я узнал, как добиться этого сегодня. Он включает использование одного из общих событий контроллера. Этот узел в config.xml
подключается к правильному событию:
<events> .... <controller_action_postdispatch_customer_account_createPost> <observers> <your_module_here>...etc
Событие controller_action_postdispatch_REQUESTPATH Mage_Core_Controller_Front_Action
для каждого контроллера, который расширяет Mage_Core_Controller_Front_Action
(в основном это все), что делает его очень легким для таргетинга. Тоже для controller_action_predispatch_REQUESTPATH
.
Я немного удивлен, что ни один из ответов не будет полностью решен.
Создание клиента может произойти
Я решил это, отслеживая два события:
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>
потому что при предварительной настройке учетная запись еще не создана. Может возникнуть ошибка, например, если почта уже существует в магазине.
Для этого нет прямого события, но вы можете использовать событие 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; }
Надеюсь, это поможет кому-то!
Вы также должны учитывать, когда пользователь регистрируется на лету в кассе: регистр на 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! ,но:
if ($this->getCustomerSession()->isLoggedIn()) { return self::METHOD_CUSTOMER; }
… «METHOD_CUSTOMER» – это имя для проверки с уже зарегистрированным пользователем, а не с нашим делом …. но да !, потому что …
Любая другая идея для регистрации при оформлении заказа?
На самом деле есть customer_save_after
и customer_save_before
(magento 1.5)
Если вы хотите изменить «на лету» некоторые данные после сообщения формы, выберите customer_save_before
, измените нужные данные и все (действие сохранения произойдет после этого, поэтому ваши изменения будут учтены).
$customer->save()
просто не работает в customer_save_after
. (фатальная ошибка) Используйте этот наблюдатель для запуска кода после создания клиента, которые НЕ относятся к данным клиента.
Надеюсь, это поможет!
Вы можете попробовать customer_save_after, единственное, что регистрация отправляет это событие дважды
Я искал то же самое. Я считаю, что событие customer_register_success
.
Вы можете найти ссылку для всех событий по адресу: http://www.nicksays.co.uk/magento_events_cheat_sheet/
customer_register_success
adminhtml_customer_save_after
эти два являются событиями по умолчанию, когда клиент вставляется в базу данных …. Первое событие срабатывает во фронте, когда пользователь регистрируется, а второе событие срабатывает в бэкэнд, когда клиент создается через панель администратора … надеюсь, вы знаете, как зарегистрировать наблюдателя на мероприятие … надеюсь, это поможет вам …
Я нашел событие 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. Не знаю, почему. Надеюсь это поможет.
Ответ на этот вопрос заключается в том, что для этого нет события.
Я обнаружил, что события customer_login
и customer_session_init
выставляются при создании учетной записи. Вы можете зарегистрировать прослушиватель для обоих, а затем проверить, чтобы увидеть дату создания в учетной записи?
Вы можете использовать событие customer_register_success. Он запускается после успешного создания клиента. Вот ссылка обмана. Надеюсь, это также поможет вам.
http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/
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) ); }
customer_save_after
– событие, которое вызывается после customer registration
нового customer registration
.
Читайте обо всех events
здесь:
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/events
имя события: customer_registration_is_allowed
Я не уверен, что это вы хотите, вы можете написать наблюдателю для тестирования