сохранить клиента перед обработкой заказа нажмите кнопку


Здравствуйте, я хочу сохранить нового клиента на странице оформления заказа после заполнения его информации, но перед тем, как нажать кнопку "Оформить заказ". Есть ли у них какая-либо возможность сохранить нового клиента с помощью этого метода?

Author: Shathish, 2013-07-30

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();
                   }
           }
    }
}

Примечание :

  1. Это будет сохраните клиента сразу после того, как он нажмет "Продолжить" на вкладке "Платежная информация".

  2. Вы можете сделать это в разделе "Сохранить доставку" или "Сохранить способ оплаты".

  3. Если вы хотите автоматически войти в систему этого клиента, добавьте следующее в Observer.php после

    $customer->save();
    }
    
    Mage::getSingleton('customer/session')->loginById($customer->getId()); // to login that customer.
    
 5
Author: Shathish, 2013-07-30 06:39:43

Спасибо вам за это замечательное решение. Я искал этого с давних пор. Но я только что сделал важное уведомление относительно вашего примечания 3 "автоматический вход". Если вы добавите следующую строку...

Mage::getSingleton('customer/session')->loginById($customer->getId());

...за пределами следующего условия:

if (!$customer->getId()) {

В результате, если вы ввели существующий адрес электронной почты, вы автоматически войдете в систему с соответствующей учетной записью. Есть ли у вас такой же результат с вашей стороны?

Кстати, я только что перенес инструкцию "автоматический вход" Внутри кондитона. И это работает просто как заклинание.

 0
Author: DarkCowboy, 2014-05-13 09:11:55