2014-01-29 304 views
4

我试图按国名查找国家代码。因此,举例来说,我有“荷兰”,我需要得到“NL”Magento:按国名获取国家代码

我知道有方法来查找名称形式代码:

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

但我需要反之亦然。
那么在Magento中有解决它的方法吗?

+0

的可能重复[Magento的 - 从名称获取国家的ID - 有没有更简单/更快的方法?(HTTP://计算器.com/questions/18786233/magento-get-country-id-name-is-there-a-easy-way-way) –

回答

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的循环做是没有办法过滤或负载的名字。

+0

无需加载国家集合,只需通过语言环境访问该XML:http:// stackoverflow.com/a/31876032/1939217 –

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> 
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); 
5

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