2014-10-01 77 views
2

我想删除在magento后端没有默认的客户地址。我已经使用下面的代码来删除,但它从通讯录中删除所有地址。从客户地址删除地址

<?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(); 
      } 
     } 

    } 
?> 

那么如何防止删除默认的账单和送货地址。 请帮助

回答

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) 
    } 
    } 
+0

抱歉,但它不工作 – Zaheerabbas 2014-10-01 10:05:39

+0

编辑,请使用$ customer-> getDefaultBillingAddress(),并且您必须获得此地址集的ID $ def_billing = founded_ID; $ def_shipping = created_ID并将其添加到我的答案中,或者发布到com我会为其他thx芬兰人的答案 – Martin 2014-10-01 10:15:14

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