2016-06-04 4 views
0

Как получить адрес улицы 1 и адрес 2. Я создаю расширение, и я хочу получить адрес в Magento. В блоке У меня есть эта функция:OUTPUGet street1 и street 2 Magento

public function updateFormData() { 
    $data = $this->getData('form_data'); 
    if (is_null($data)) { 
     /** @var array $formData */ 
     $formData = Mage::getSingleton('customer/session')->getCustomerFormData(true); 
     $order = $this->getOrder(); 
     $address = $order->getShippingAddress(); 
     $customerData = [ 
      'email' => $order->getCustomerEmail(), 
      'firstname' => $order->getCustomerFirstname(), 
      'lastname' => $order->getCustomerLastname(), 
      'city' => $order->getBillingAddress()->getCity(), 
      'country' => $order->getBillingAddress()->getCountry(), 
      'telephone' => $order->getBillingAddress()->getTelephone(), 
      'company' => $order->getBillingAddress()->getCompany(), 
     ]; 

     $data = new Varien_Object(); 
     if ($formData) { 
      $data->addData($formData); 
      $data->setCustomerData(1); 
     } 
     $data->addData($customerData); 
     if (isset($data['region_id'])) { 
      $data['region_id'] = (int)$data['region_id']; 
     } 
     $this->setData('form_data', $data); 
    } 
    return $data; 
} 

и в файле PHTML добавить это:

 <?php $_streetValidationClass = $this->helper('customer/address')->getAttributeValidationClass('street'); ?> 
      <li class="wide"> 
       <label for="street_1" class="required"><em>*</em><?php echo $this->__('Street Address') ?></label> 
       <div class="input-box"> 
        <input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getFormData()->getStreet(1)) ?>" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Street Address')) ?>" id="street_1" class="input-text <?php echo $_streetValidationClass ?>" /> 
       </div> 
      </li> 
     <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> 
     <?php for ($_i = 2, $_n = $this->helper('customer/address')->getStreetLines(); $_i <= $_n; $_i++): ?> 
      <li class="wide"> 
       <div class="input-box"> 
        <input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getFormData()->getStreet($_i)) ?>" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Street Address %s', $_i)) ?>" id="street_<?php echo $_i ?>" class="input-text <?php echo $_streetValidationClass ?>" /> 
       </div> 
      </li> 
     <?php endfor; ?> 

Я пытаюсь добавить 'street_1' => $order->getBillingAddress()->getData('street'), Но всегда street_1 значение адреса является пустым. Я пытаюсь получить все поля на странице успеха заказа.

ВЫВОД:

<li class="wide"> 
<label class="required" for="street_1"> 
<div class="input-box"> 
<input id="street_1" class="input-text required-entry" type="text" title="Street Address" value="address1 address2" name="street[]"> 
</div> 
</li> 
<li class="wide"> 
<div class="input-box"> 
<input id="street_2" class="input-text " type="text" title="Street Address 2" value="" name="street[]"> 
</div> 
</li> 

ответ

2

$order->getBillingAddress()->getData('street') возвращает массив.
Таким образом, вы можете получить доступ к данным с:

$billingStreet = $order->getBillingAddress()->getData('street'); 
$billingStreet1 = $billingStreet[0]; 
$billingStreet2 = $billingStreet[1]; 
$billingStreet3 = $billingStreet[2]; 

редактировать: код выше, чтобы получить платежный адрес заказа, что я думаю, что вы хотите сейчас на самом деле новый адрес, данные, установленные в форма. Таким образом, это должно дать вам информацию, вы после этого, до тех пор, как вы выразились до $data = new Varien_Object(); линии:

$streetArray = $data['street']; 
$street1  = $streetArray[0]; 
$street2  = $streetArray[1]; 

так что ваша функция будет:

public function updateFormData() { 
    $data = $this->getData('form_data'); 
    if (is_null($data)) { 
     /** @var array $formData */ 
     $formData = Mage::getSingleton('customer/session')->getCustomerFormData(true); 
     $order = $this->getOrder(); 
     $address = $order->getShippingAddress(); 
     $streetArray = $data['street']; 
     $street1  = $streetArray[0]; 
     $street2  = $streetArray[1]; 
     $customerData = [ 
      'email' => $order->getCustomerEmail(), 
      'firstname' => $order->getCustomerFirstname(), 
      'lastname' => $order->getCustomerLastname(), 
      'city' => $order->getBillingAddress()->getCity(), 
      'country' => $order->getBillingAddress()->getCountry(), 
      'telephone' => $order->getBillingAddress()->getTelephone(), 
      'company' => $order->getBillingAddress()->getCompany(), 
      'street_1' => $street1, 
      'street_2' => $street2 
     ]; 

     $data = new Varien_Object(); 
     if ($formData) { 
      $data->addData($formData); 
      $data->setCustomerData(1); 
     } 
     $data->addData($customerData); 
     if (isset($data['region_id'])) { 
      $data['region_id'] = (int)$data['region_id']; 
     } 
     $this->setData('form_data', $data); 
    } 
    return $data; 
} 
+0

спасибо, это то же самое, прежде чем Leike value = "", mean blank – Robert

+0

@RobertD проверить мое редактирование – OSdave

+0

, пожалуйста, скажите мне, как это выглядит в этой публичной функции в $ customerData = []? – Robert