OUTPUGet street1和街道2 Magento

时间:2016-06-04 07:04:36

标签: magento magento-1.7 magento-1.9

如何获取街道地址1和街道地址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>

1 个答案:

答案 0 :(得分: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;
}