#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