сохранить клиента перед обработкой заказа нажмите кнопку
Здравствуйте, я хочу сохранить нового клиента на странице оформления заказа после заполнения его информации, но перед тем, как нажать кнопку "Оформить заказ". Есть ли у них какая-либо возможность сохранить нового клиента с помощью этого метода?
2 answers
Напишите наблюдателю, чтобы он активировал события сохранения выставления счетов или сохранения доставки и сохранил клиента.
Например:
Создать Yournamespace_Yourmodulename.xml в приложении/etc/модули/
<?xml version="1.0"?>
<config>
<modules>
<Yournamespace_Yourmodulename>
<active>true</active>
<codePool>local</codePool>
</Yournamespace_Yourmodulename>
</modules>
В app/code/local/Yournamespace/Yourmodulename/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Yournamespace_Yourmodulename>
<version>1.0.0</version>
</Yournamespace_Yourmodulename>
</modules>
<global>
<events>
<controller_action_postdispatch_checkout_onepage_saveBilling>
<observers>
<auto_register_shipping>
<type>singleton</type>
<class>Yournamespace_Yourmodulename_Model_Observer</class>
<method>autoRegisterBilling</method>
</auto_register_shipping>
</observers>
</controller_action_postdispatch_checkout_onepage_saveBilling>
</events>
</global>
</config>
В app/code/local/Yournamespace/Yourmodulename/Model/Observer.php
<?php
class Yournamespace_Yourmodulename_Model_Observer {
public function autoRegisterBilling($evt){
if(!Mage::helper('customer')->isLoggedIn()){
$data = $evt->getEvent()->getControllerAction()->getRequest()->getPost('billing', array());
$customer = Mage::getModel("customer/customer");
$email = $data['email'];
$websiteId = Mage::app()->getWebsite()->getId();
$store = Mage::app()->getStore();
$pwd = $data['customer_password'];
$customer->setWebsiteId(Mage::app()->getStore()->getWebsiteId())->loadByEmail($email);
if (!$customer->getId()) {
//Code begins here for new customer registration
$customer->website_id = $websiteId;
$customer->setStore($store);
$customer->firstname = $data['firstname'];
$customer->lastname = $data['lastname'];
$customer->setEmail($email);
$customer->setPassword($pwd);
$customer->sendNewAccountEmail('confirmed');
$customer->save();
}
}
}
}
Примечание :
Это будет сохраните клиента сразу после того, как он нажмет "Продолжить" на вкладке "Платежная информация".
Вы можете сделать это в разделе "Сохранить доставку" или "Сохранить способ оплаты".
-
Если вы хотите автоматически войти в систему этого клиента, добавьте следующее в Observer.php после
$customer->save(); } Mage::getSingleton('customer/session')->loginById($customer->getId()); // to login that customer.
Спасибо вам за это замечательное решение. Я искал этого с давних пор. Но я только что сделал важное уведомление относительно вашего примечания 3 "автоматический вход". Если вы добавите следующую строку...
Mage::getSingleton('customer/session')->loginById($customer->getId());
...за пределами следующего условия:
if (!$customer->getId()) {
В результате, если вы ввели существующий адрес электронной почты, вы автоматически войдете в систему с соответствующей учетной записью. Есть ли у вас такой же результат с вашей стороны?
Кстати, я только что перенес инструкцию "автоматический вход" Внутри кондитона. И это работает просто как заклинание.