我想删除magento backend中没有默认的客户地址。我使用下面的代码删除但删除了地址簿中的所有地址。
<?php
$customer = Mage::getModel('customer/customer')->load(2);
if($customer){
/*Load the customer addresses by Customer Id*/
$customerAddressCollection = Mage::getResourceModel('customer/address_collection')->addAttributeToFilter('parent_id',$customer->getId())->getItems();
echo '<pre>';
foreach($customerAddressCollection as $customerAddress){
var_dump($customerAddress->getData());
$customer_address_id = $customerAddress->getData('entity_id');
if($customer_address_id!=""){
/*Load the Customer Address by ID and delete it*/
Mage::getModel('customer/address')->load($customer_address_id)->delete();
}
}
}
?>
那么如何防止删除默认结算和送货地址。 请帮忙
答案 0 :(得分:3)
在地址收集中,如果地址是默认结算或运送,则应该有功能:
if ( ! $customer->getDefaultBillingAddress() ) {
$def_billing = 0;
} else {
$def_billing = $customer->getDefaultBillingAddress();
$def_billing = $def_billing->getData('entity_id'); //??? test it, or $def_billing->getId()
}
// in this time change $def_billing with ID of adress and edit my answer please
if ( ! $customerObj->getDefaultShippingAddress() ) {
$def_shipping = 0;
} else {
$def_shipping = $customer->getDefaultShippingAddress();
$def_shipping = $def_shipping ->getData('entity_id'); //??? test it, or $def_shipping ->getId()
}
// in this time change $def_shipping with ID of adress and edit my answer please
//If you find the function working, you can use condition:
foreach($customerAddressCollection as $customerAddress){
if($def_shipping == $customerAddress->getData('entity_id') || $def_billing == customerAddress->getData('entity_id')) {
// skip
} else {
// do the deletng job ($customerAddress object is not shipping or billing default)
}
}
答案 1 :(得分:3)
客户收集的最终答案
<?php
$collection = Mage::getModel('customer/customer')->getCollection();
foreach($collection as $customer){
$customer = Mage::getModel('customer/customer')->load($customer->getId());
if($customer){
/*Load the customer addresses by Customer Id*/
$customerAddressCollection = Mage::getResourceModel('customer/address_collection')->addAttributeToFilter('parent_id',$customer->getId())->getItems();
foreach($customerAddressCollection as $customerAddress){
$customer_address_id = $customerAddress->getData('entity_id');
if ( ! $customer->getDefaultBillingAddress() ) {
} else {
$def_billing = $customer->getDefaultBillingAddress();
$def_billing = $def_billing->getData('entity_id'); //??? test it, or $def_billing->getId()
}
// in this time change $def_billing with ID of adress and edit my answer please
if ( ! $customer->getDefaultShippingAddress() ) {
} else {
$def_shipping = $customer->getDefaultShippingAddress();
$def_shipping = $def_shipping ->getData('entity_id'); //??? test it, or $def_shipping ->getId()
}
if($def_shipping == $customerAddress->getData('entity_id') || $def_billing == $customerAddress->getData('entity_id')){
/*Load the Customer Address by ID and delete it*/
$customer_address_id = $customerAddress->getData('entity_id');
} else {
// do the deletng job ($customerAddress object is not shipping or billing default)
Mage::getModel('customer/address')->load($customer_address_id)->delete();
}
}
}
}exit;
?>