2013-07-26 3 views
1

에서 고객 주소를 업데이트 :어떻게 내가 같은 코드가 젠토

public function editAddress($data, $id) 
{ 
    // $id - customer id, $data - data from form 
    $customer = Mage::getModel('customer/customer') 
     ->load($id); 

    if (! $customer->getId() || ! $otherConditionIsValid) { 
     return $this; 
    } 

    $dataShipping = array(
        'firstname' => $data['firstname'], 
        'middlename' => $data['middlename'], 
        'lastname' => $data['lastname'], 
        'prefix' => $data['prefix'], 
        'suffix' => $data['suffix'], 
        'company' => $data['company'], 
        'street' => $data['street'], 
        'country_id' => $data['country'], 
        'city' => $data['city'], 
        'region_id' => '', 
        'region' => $data['region'], 
        'postcode' => $data['postal'], 
        'country_id' => $data['country'], 
        'telephone' => $data['telephone'], 
        'fax' => $data['fax'], 
    ); 

    $customerAddress = Mage::getModel('customer/address'); 

    if ($defaultShippingId = $customer->getDefaultShipping()){ 
     $customerAddress->load($defaultShippingId); 
    } else { 
     $customerAddress 
      ->setCustomerId($post['customer_id']) 
      ->setIsDefaultShipping('1') 
      ->setSaveInAddressBook('1'); 
     $customer->addAddress($customerAddress); 
    }    

    try { 
     $customerAddress 
      ->addData($dataShipping) 
      ->save();   
    } catch(Exception $e){ 
     Mage::log('Address Save Error::' . $e->getMessage()); 
    } 

    return $this; 
} 

그것을 DB를 업데이트하지 않는,하지만 난 마 젠토에지고있어 데이터 배열, 나는 매우 당신이 나에게 도움이되기를 바랍니다, thx

답변

2

코드에 약간의 수정을 가할 것입니다. addData 메서드를 사용하는 대신 주소에서 setData 메서드를 사용해보십시오. 또한 게시물에서 유효한 고객 ID를 얻고 있는지 확인합니다. 나는 또한 addAddress 방법이 여기에서 필요하다고 생각하지 않는다.

// Build billing address for customer 
$dataShipping = array(
    'firstname' => $data['firstname'], 
    'middlename' => $data['middlename'], 
    'lastname' => $data['lastname'], 
    'prefix' => $data['prefix'], 
    'suffix' => $data['suffix'], 
    'company' => $data['company'], 
    'street' => $data['street'], 
    'country_id' => $data['country'], 
    'city' => $data['city'], 
    'region_id' => '', 
    'region' => $data['region'], 
    'postcode' => $data['postal'], 
    'country_id' => $data['country'], 
    'telephone' => $data['telephone'], 
    'fax' => $data['fax'], 
); 

$customerAddress = Mage::getModel('customer/address'); 

if ($defaultShippingId = $customer->getDefaultShipping()){ 
    $customerAddress->load($defaultShippingId); 
} else { 
    $customerAddress 
     ->setCustomerId($post['customer_id']) 
     ->setIsDefaultBilling('0') 
     ->setIsDefaultShipping('1') 
     ->setSaveInAddressBook('1'); 
} 

try { 
    $customerAddress->setData($dataShipping); 
    $customerAddress->save(); 
} catch (Exception $ex) { 
    Mage::log('Address Save Error::' . $e->getMessage()); 
} 
+0

내가 가진 로그에 이러한 오류 : 저장 오류 : SQLSTATE 주소 [23000] : 무결성 제약 조건 위반 : 1452 추가 또는 자식 행을 업데이트 할 수 없습니다 : shopping_app'.'customer_address_entity''(외래 키 제약 조건이 실패, CONSTRAINT'FK_CUSTOMER_ADDRESS_ENTITY_PARENT_ID_CUSTOMER_ENTITY_ENTITY_ID' FOREIGN KEY ('parent_id')'customer_entity' ('entity_id') ON DE)를 참조하십시오. 나를 설명해 주시겠습니까 – user2519904

+0

게시물을 작성하는 고객 ID가 유효합니까? 또한 나는 이것을 알았다. $ customer-> getDefaultShipping()과 같이 기본 배송을 얻었지만 ID를 얻으려면 $ customer-> getDefaultShipping() -> getId()와 같이 가져와야한다. 당신은 ID뿐 아니라 전체 주소 객체를 얻고 있습니다. 여기에서 ID를 사용하려고합니다. –