Я пытаюсь создать или обновить адрес доставки по умолчанию для клиента, используя событие customer_save_after
(на основе некоторых пользовательских полей регистрации), когда клиент пытается создать новую учетную запись или изменить свою учетную запись.Magento - Как обновить адрес доставки, используя событие customer_save_after?
Здесь идет часть модели Observer код:
...
$customer = $observer->getEvent()->getCustomer();
if ($customer->getId() && $otherConditionIsValid){
$dataShipping = array(
'firstname' => $someFixedFirstName,
'lastname' => $someFixedLastName,
'street' => array($someFixedStreetLine),
'city' => $someFixedCity,
'region' => $someFixedState,
'region_id' => '',
'postcode' => $someFixedZipcode,
'country_id' => $someFixedCountry,
'telephone' => $someFixedTelephone,
);
$customerAddress = Mage::getModel('customer/address');
if($defaultShippingId = $customer->getDefaultShipping()){ //if customer already has default shipping address
$customerAddress->load($defaultShippingId);
}
$customerAddress->setData($dataShipping)
->setCustomerId($customer->getId())
->setIsDefaultShipping('1')
->setSaveInAddressBook('1');
$customer->addAddress($customerAddress); #setting Shipping Address to be added/updated
//When i try to use below commented code, script gets called for infinite times, finally running out of memory
/*try{
$customerAddress->save();
}catch(Exception $e){
Mage::log('Address Save Error::' . $e->getMessage());
}*/
}
...
Приведенный выше код работает отлично, когда клиент создает новую учетную запись. Однако адрес доставки по умолчанию не обновляется, когда клиент пытается изменить настраиваемое поле регистрации от My Account > Account Information
Так моя основная проблема в том, как обновить адрес доставки с помощью $customer
объекта или любой другой код, используя customer_save_after
событие.
Спасибо тонну Дрю! Это работало как шарм. Я думаю, что условная настройка адреса доставки сделала трюк. Ура! – MagePsycho
не работает для меня - я получаю 'вызов функции-члена getDefaultShipping() для не-объекта', потому что кажется, что' $ customer = $ observer-> getEvent() -> getCustomer() 'возвращает идентификатор клиента вместо объекта клиента –