Регистрация в Magento с указанием адреса выставления счетов и доставки

#magento #registration

#magento #Регистрация

Вопрос:

Возможно ли, что при регистрации пользователя в Magento он также сохраняет свои адреса (выставление счетов и доставка)

введите описание изображения здесь

Ответ №1:

Создайте модуль с контроллером, который расширяет Mage_Customer_AccountController , содержащий createPostAction() . Я продублировал бит, который обрабатывает адрес выставления счетов, найдите этот if-блок:

 if ($this->getRequest()->getPost('create_address')) { 
  

И добавьте это в конец:

 if ($this->getRequest()->getPost('create_shipping_address')) {
$shippingAddress = Mage::getModel('customer/address');
$shippingAddressForm = Mage::getModel('customer/form');
$shippingAddressForm->setFormCode('customer_register_address')
    ->setEntity($shippingAddress);

$shippingAddressData = array(
    'firstname'  => $addressData['firstname'],
    'lastname'   => $addressData['lastname'],
    'company'    => $this->getRequest()->getPost('shipping_company'),
    'street'     => $this->getRequest()->getPost('shipping_street'),
    'city'       => $this->getRequest()->getPost('shipping_city'),
    'country_id' => $this->getRequest()->getPost('shipping_country_id'),
    'region'     => $this->getRequest()->getPost('shipping_region'),
    'region_id'  => $this->getRequest()->getPost('shipping_region_id'),
    'postcode'   => $this->getRequest()->getPost('shipping_postcode'),
    'telephone'  => $this->getRequest()->getPost('shipping_telephone'),
    'fax'        => $this->getRequest()->getPost('shipping_fax')
    );

$shippingAddressErrors = $addressForm->validateData($shippingAddressData);

if ($shippingAddressErrors === true) {
    $shippingAddress->setId(null)
        ->setIsDefaultBilling($this->getRequest()->getParam('shipping_default_billing', false))
        ->setIsDefaultShipping($this->getRequest()->getParam('shipping_default_shipping', false));

    $shippingAddressForm->compactData($shippingAddressData);

    $customer->addAddress($shippingAddress);

    $shippingAddressErrors = $shippingAddress->validate();

    if (is_array($shippingAddressErrors)) {
        $errors = array_merge($errors, $shippingAddressErrors);
    }
} else {
    $errors = array_merge($errors, $shippingAddressErrors);
}}
  

Конечно, вам также необходимо дублировать форму в ваших темах template/customer/form/register.html , в частности, код внутри этого if-блока:

 if($this->getShowAddressFields()): ?>
  

Префикс всех имен полей ID и в скопированном коде с помощью shipping_ . В JavaScript внизу вам нужно продублировать строку RegionUpdater, например:

 new RegionUpdater('country',          'region',          'region_id', <?php echo   $this->helper('directory')->getRegionJson() ?>, undefined, 'zip');
new RegionUpdater('country', 'shipping_region', 'shipping_region_id', <?php echo $this->helper('directory')->getRegionJson() ?>, undefined, 'zip'); 
  

(почти) полный код можно найти здесь:

AccountController.php : http://pastebin.com/9h9HqYAa

register.html : http://pastebin.com/Q7EawU7L

Это работает отлично

Ответ №2:

Существует способ ввести один адрес при регистрации.

Перейдите к: template/customer/form/register.phtml и if($this->getShowAddressFields())

Просто принудительно измените это условие, и вы получите поля адреса там.

Ответ №3:

Чтобы добавить к ответу Масси и Стива, в Magento 1.9.0.1 , я только учусь, но я смог заставить это работать, добавив этот код в конец _getErrorsOnCustomerAddress функции в расширении Mage_Customer_AccountController .

Комментарии:

1. Я безуспешно пытаюсь сделать то же самое в magento Magento 1.9.3.4. Я могу только вставить адрес выставления счетов. По какой-то причине адрес доставки не создается. Какие-либо другие рекомендации?

Ответ №4:

Не в версии Magento по умолчанию. вы должны найти расширение для этого или написать свой собственный «наблюдатель», чтобы добавить адрес одновременно с регистрацией.

Ответ №5:

Как сказал мясник, добавив этот код в конец _getErrorsOnCustomerAddress . Я только что попробовал, и у меня все работает нормально. И я также установил значение «1» вместо «0» в коде

<input type="hidden" name="create_shipping_address" value="0" />

(посмотрите ссылку, которую дали Стив и Масси register.html : http://pastebin.com/Q7EawU7L )

Я на Magento 1.9.0.1