Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento地址模板区域代码_Magento - Fatal编程技术网

Magento地址模板区域代码

Magento地址模板区域代码,magento,Magento,我正在Magento(v.1.9.2.4)中创建一个网站,我希望仅使用地区代码而不是整个地区名称(例如:罗德岛到RI)来格式化地址 我知道该模板位于Customer Configuration>Address Templates {{depend prefix}{var prefix}{{{var lastname}{{var firstname}{{depend middlename}}{{var middlename}}{{{/depend}{{var lastname}{{depend s

我正在Magento(v.1.9.2.4)中创建一个网站,我希望仅使用地区代码而不是整个地区名称(例如:罗德岛到RI)来格式化地址

我知道该模板位于
Customer Configuration>Address Templates

{{depend prefix}{var prefix}{{{var lastname}{{var firstname}{{depend middlename}}{{var middlename}}{{{/depend}{{var lastname}{{depend suffix}{{var suffix}}{{var suffix}{{/depend}{br/> {{depend company}{{var company}}
{{/depend} {{if street1}{{var street1}}
{{/if} {{depend street2}{{var street2}}
{{/depend} {{depend street3}}{{var street3}}
{{/depend} {{depend street4}}{{var street4}}
{{/depend} {{if city}{var city},{{if}{{if region}{{var region},{{if}{{if postcode}{{var postcode}{{{{if region}br/> {{var country}}
{{depend telephone}}}T:{{var telephone}}{{/depend}} {{depend fax}}
F:{{var fax}}{{/depend} {{depend vat_id}
vat:{{var vat_id}}{{/depend}`

但是当我把
{{{if region}{{var region}}
改为
{{if regioncode}}{{var regioncode}
{if region{u code}}{var region{code}}时,它就不起作用了

有人能帮我吗? 我也试图搜索字段列表,但什么也找不到


谢谢,regioncode不是客户地址属性。只有区域和区域id可用

{{/if}}{{if region}{{var region}

将显示完整的地区名称,如加利福尼亚州 我们可以覆盖本地文件夹中的地址块,并自定义代码以显示类似CA的regioncode

更改客户地址模板:

系统->配置->客户->客户配置

并向下滚动至地址模板并编辑:

{{/if}}{{if region}{{var region}}替换为{{/if}{if} 区域{u id}{{var区域{u id}}

替代块副本的步骤

'app/code/core/Mage/Customer/Block/Address/Renderer/Default.php'

进入

'app/code/local/Mage/Customer/Block/Address/Renderer/Default.php'

。仅执行此操作将使magento从本地文件夹而不是核心文件夹读取此文件,并更改
render()
方法,如下所示:

public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
    {
        switch ($this->getType()->getCode()) {
            case 'html':
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_HTML;
                break;
            case 'pdf':
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_PDF;
                break;
            case 'oneline':
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_ONELINE;
                break;
            default:
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_TEXT;
                break;
        }

        $formater   = new Varien_Filter_Template();
        $attributes = Mage::helper('customer/address')->getAttributes();

        $data = array();
        foreach ($attributes as $attribute) {
            /* @var $attribute Mage_Customer_Model_Attribute */
            if (!$attribute->getIsVisible()) {
                continue;
            }
            if ($attribute->getAttributeCode() == 'country_id') {
                $data['country'] = $address->getCountryModel()->getName();
            } else if ($attribute->getAttributeCode() == 'region') {
                $data['region'] = Mage::helper('directory')->__($address->getRegion());
            }else if ($attribute->getAttributeCode() == 'region_id') {
$data['region_id']= Mage::helper('directory')->($address->getRegionCode())


regioncode不是客户地址属性。只有区域和区域id可用

{{/if}}{{if region}{{var region}

将显示完整的地区名称,如加利福尼亚州 我们可以覆盖本地文件夹中的地址块,并自定义代码以显示类似CA的regioncode

更改客户地址模板:

系统->配置->客户->客户配置

并向下滚动至地址模板并编辑:

{{/if}}{{if region}{{var region}}替换为{{/if}{if} 区域{u id}{{var区域{u id}}

替代块副本的步骤

'app/code/core/Mage/Customer/Block/Address/Renderer/Default.php'

进入

'app/code/local/Mage/Customer/Block/Address/Renderer/Default.php'

。仅执行此操作将使magento从本地文件夹而不是核心文件夹读取此文件,并更改
render()
方法,如下所示:

public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
    {
        switch ($this->getType()->getCode()) {
            case 'html':
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_HTML;
                break;
            case 'pdf':
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_PDF;
                break;
            case 'oneline':
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_ONELINE;
                break;
            default:
                $dataFormat = Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_TEXT;
                break;
        }

        $formater   = new Varien_Filter_Template();
        $attributes = Mage::helper('customer/address')->getAttributes();

        $data = array();
        foreach ($attributes as $attribute) {
            /* @var $attribute Mage_Customer_Model_Attribute */
            if (!$attribute->getIsVisible()) {
                continue;
            }
            if ($attribute->getAttributeCode() == 'country_id') {
                $data['country'] = $address->getCountryModel()->getName();
            } else if ($attribute->getAttributeCode() == 'region') {
                $data['region'] = Mage::helper('directory')->__($address->getRegion());
            }else if ($attribute->getAttributeCode() == 'region_id') {
$data['region_id']= Mage::helper('directory')->($address->getRegionCode())


如果有人仍在寻找解决方案,您还可以添加一个
helper
类,将区域转换为区域代码,并调用块中的helper函数

示例

假设您已经创建了自定义模块

包/module/Helper/Data.php


最后是您的自定义块 Package/module/Block/Address/Renderer/DefaultRenderer.php


如果有人仍在寻找解决方案,您还可以添加一个
助手
类,将区域转换为区域代码,并调用块中的助手函数

示例

假设您已经创建了自定义模块

包/module/Helper/Data.php


最后是您的自定义块 Package/module/Block/Address/Renderer/DefaultRenderer.php


还请添加一个如何执行的示例。公认的答案很好地描述了这一点。您的答案应该在实际接受的答案中添加新的内容。我已经添加了示例代码,请检查它。还请添加一个如何执行的示例。公认的答案很好地描述了这一点。您的答案应该在实际接受的答案中添加新的内容。我已经添加了示例代码,请检查。
<?php
namespace Package\Module\Helper;
use Magento\Directory\Model\ResourceModel\Region\Collection;
use Magento\Directory\Model\ResourceModel\Region\CollectionFactory;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    /**
     * @var Collection
     */
    private $collectionFactory;

    public function __construct(
        CollectionFactory $collectionFactory
    ) {
        $this->collectionFactory = $collectionFactory;
    }

    /**
     * @param string $region
     * @return string[]
     */
    public function getRegionCode(string $region): array
    {
        $regionCode = $this->collectionFactory->create()
            ->addRegionNameFilter($region)
            ->getFirstItem()
            ->toArray();
        return $regionCode;
    }
}
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Customer\Block\Address\Renderer\DefaultRenderer" type="Package\Module\Block\Address\Renderer\DefaultRenderer"/>
</config>
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Package\module\Block\Address\Renderer;

use Magento\Customer\Block\Address\Renderer\RendererInterface;
use Magento\Customer\Model\Address\AddressModelInterface;
use Magento\Customer\Model\Address\Mapper;
use Magento\Customer\Model\Metadata\ElementFactory;
use Magento\Directory\Model\Country\Format;
use Magento\Framework\View\Element\AbstractBlock;
use Magento\TestFramework\Event\Magento;
use Package\module\Helper\Data;

/**
 * Address format renderer default
 */
class DefaultRenderer extends AbstractBlock implements RendererInterface
{
    /**
     * Format type object
     *
     * @var \Magento\Framework\DataObject
     */
    protected $_type;

    /**
     * @var ElementFactory
     */
    protected $_elementFactory;

    /**
     * @var \Magento\Directory\Model\CountryFactory
     */
    protected $_countryFactory;

    /**
     * @var \Magento\Customer\Api\AddressMetadataInterface
     */
    protected $_addressMetadataService;

    /**
     * @var Mapper
     */
    protected $addressMapper;

    /**
     * Constructor
     *
     * @param \Magento\Framework\View\Element\Context $context
     * @param ElementFactory $elementFactory
     * @param \Magento\Directory\Model\CountryFactory $countryFactory
     * @param \Magento\Customer\Api\AddressMetadataInterface $metadataService
     * @param Mapper $addressMapper
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\View\Element\Context $context,
        ElementFactory $elementFactory,
        \Magento\Directory\Model\CountryFactory $countryFactory,
        \Magento\Customer\Api\AddressMetadataInterface $metadataService,
        Mapper $addressMapper,
        array $data = [],
        Data $helper
    ) {
        $this->_elementFactory = $elementFactory;
        $this->_countryFactory = $countryFactory;
        $this->_addressMetadataService = $metadataService;
        $this->addressMapper = $addressMapper;
        parent::__construct($context, $data);
        $this->_isScopePrivate = true;
        $this->helper = $helper;
    }

    /**
     * Retrieve format type object
     *
     * @return \Magento\Framework\DataObject
     */
    public function getType()
    {
        return $this->_type;
    }

    /**
     * Retrieve format type object
     *
     * @param  \Magento\Framework\DataObject $type
     * @return \Magento\Customer\Block\Address\Renderer\DefaultRenderer
     */
    public function setType(\Magento\Framework\DataObject $type)
    {
        $this->_type = $type;
        return $this;
    }

    /**
     * Get the format of the address
     *
     * @param AddressModelInterface|null $address
     * @return string
     * All new code should use renderArray based on Metadata service
     */
    public function getFormat(AddressModelInterface $address = null)
    {
        $countryFormat = $address === null
            ? false : $address->getCountryModel()->getFormat(
                $this->getType()->getCode()
            );
        $format = $countryFormat ? $countryFormat->getFormat() : $this->getType()->getDefaultFormat();
        return $format;
    }

    /**
     * Render address
     *
     * @param AddressModelInterface $address
     * @param string|null $format
     * @return mixed
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     * @SuppressWarnings(PHPMD.NPathComplexity)
     */
    public function render(AddressModelInterface $address, $format = null)
    {
        $address = $address->getDataModel(0, 0);
        return $this->renderArray($this->addressMapper->toFlatArray($address), $format);
    }

    /**
     * @inheritdoc
     */
    public function getFormatArray($addressAttributes = null)
    {
        $countryFormat = false;
        if ($addressAttributes && isset($addressAttributes['country_id'])) {
            /** @var \Magento\Directory\Model\Country $country */
            $country = $this->_countryFactory->create()->load($addressAttributes['country_id']);
            $countryFormat = $country->getFormat($this->getType()->getCode());
        }
        $format = $countryFormat ? $countryFormat->getFormat() : $this->getType()->getDefaultFormat();
        return $format;
    }

    /**
     * Render address by attribute array
     *
     * @param array $addressAttributes
     * @param Format|null $format
     * @return string
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     * @SuppressWarnings(PHPMD.NPathComplexity)
     */
    public function renderArray($addressAttributes, $format = null)
    {
        switch ($this->getType()->getCode()) {
            case 'html':
                $dataFormat = ElementFactory::OUTPUT_FORMAT_HTML;
                break;
            case 'pdf':
                $dataFormat = ElementFactory::OUTPUT_FORMAT_PDF;
                break;
            case 'oneline':
                $dataFormat = ElementFactory::OUTPUT_FORMAT_ONELINE;
                break;
            default:
                $dataFormat = ElementFactory::OUTPUT_FORMAT_TEXT;
                break;
        }

        $attributesMetadata = $this->_addressMetadataService->getAllAttributesMetadata();
        $data = [];
        foreach ($attributesMetadata as $attributeMetadata) {
            if (!$attributeMetadata->isVisible()) {
                continue;
            }
            $attributeCode = $attributeMetadata->getAttributeCode();
            if ($attributeCode == 'country_id' && isset($addressAttributes['country_id'])) {
                $data['country'] = $this->_countryFactory->create()->loadByCode(
                    $addressAttributes['country_id']
                )->getName();
            } elseif ($attributeCode == 'region' && isset($addressAttributes['region'])) {
                $data['region'] = (string)__($addressAttributes['region']);
                $regionName = $addressAttributes['region'];
                $regionData= $this->helper->getRegionCode($regionName);
                $regionArray = $regionData;
                $data['region_code'] = $regionArray['code'];

            } elseif (isset($addressAttributes[$attributeCode])) {
                $value = $addressAttributes[$attributeCode];
                $dataModel = $this->_elementFactory->create($attributeMetadata, $value, 'customer_address');
                $value = $dataModel->outputValue($dataFormat);
                if ($attributeMetadata->getFrontendInput() == 'multiline') {
                    $values = $dataModel->outputValue(ElementFactory::OUTPUT_FORMAT_ARRAY);
                    // explode lines
                    foreach ($values as $k => $v) {
                        $key = sprintf('%s%d', $attributeCode, $k + 1);
                        $data[$key] = $v;
                    }
                }
                $data[$attributeCode] = $value;
            }
        }
        if ($this->getType()->getEscapeHtml()) {
            foreach ($data as $key => $value) {
                $data[$key] = $this->escapeHtml($value);
            }
        }
        $format = $format !== null ? $format : $this->getFormatArray($addressAttributes);
        return $this->filterManager->template($format, ['variables' => $data]);
    }
}