Magento:按国家/地区名称获取国家/地区代码

时间:2014-01-29 15:19:39

标签: php magento

我试图按国家/地区名称查找国家/地区代码。所以,例如,我有“荷兰”,我需要得到“NL”

我知道有找到名称格式代码的方法:

$country_name = Mage::app()->getLocale()->getCountryTranslation($country_code) 

但我需要反过来。
那么Magento有什么方法可以解决它吗?

5 个答案:

答案 0 :(得分:5)

From the other question,这只能通过循环播放国家/地区集合

来完成
$countryId = '';
$countryCollection = Mage::getModel('directory/country')->getCollection();
foreach ($countryCollection as $country) {
    if ($countryName == $country->getName()) {
        $countryId = $country->getCountryId();
        break;
    }
}
echo $countryId;

由于数据如何存储在XML中,因此无法按名称进行过滤或加载。

答案 1 :(得分:5)

这对我有用 $list = Mage::app()->getLocale()->getCountryTranslationList(); $list=array_flip($list); echo $list['United States'];

答案 2 :(得分:2)

有一种方法可以在不加载国家/地区的情况下获取国家/地区ID。由于所有使用名称映射的国家/地区ID都存储在XML中,因此您可以通过区域设置对象访问该XML。

$list = Mage::app()->getLocale()->getCountryTranslationList();
foreach ($list as $id => $name) {
    if ($name == $countryName) {
        return $id;
    }
}

请注意,国家/地区名称应翻译为当前的区域设置语言。否则将语言环境更改为必要的:

$oldCode = Mage::app()->getLocale()->getLocaleCode();
Mage::app()->getLocale()->setLocaleCode('en_US');
...
...
...
Mage::app()->getLocale()->setLocaleCode($oldCode);

答案 3 :(得分:1)

在Magento 2中,缺少简单的流程,因此我建议您使用zend框架,如:

$countryId = array_search($countryName, \Zend_Locale::getTranslationList('territory'));

别忘了确保您的国家名称大写。

答案 4 :(得分:0)

国家集合

        <select title="Country" class="validate-select" id="billing:country_id"                      name="billing[country_id]">
             <option value=""> </option>
             <?php
                 $collection = Mage::getModel('directory/country')->getCollection();    
                 foreach ($collection as $country) 
                 {
                    ?>
                     <option value="<?php echo $country->getId(); ?>"><?php echo $country->getName(); ?></option>
                    <?php 
                }
            ?>
       </select>