Ответ 1
Ответ на этот вопрос заключается в том, что для этого нет события.
Я хотел бы иметь возможность запускать некоторые функции с помощью 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 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>
Я узнал, как добиться этого сегодня. Он включает использование одного из общих событий контроллера. Этот 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
.
Я немного удивлен, что ни один из ответов, если полностью решить проблему.
Возможно создание клиента
Я решил это, отслеживая два события:
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!!, но:
Если мы вызываем метод 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
Любая другая идея для регистрации при оформлении заказа?
На самом деле есть 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
.
Прочитайте обо всех events
здесь:
http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/events
имя события: customer_registration_is_allowed
Я не уверен, что это вы хотите, вы можете написать наблюдателю для тестирования