从客户地址删除地址

时间:2014-10-01 09:31:57

标签: magento magento-1.7

我想删除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();
            }
        }

    }
?>

那么如何防止删除默认结算和送货地址。 请帮忙

2 个答案:

答案 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;
?>