我试图按国家/地区名称查找国家/地区代码。所以,例如,我有“荷兰”,我需要得到“NL”
我知道有找到名称格式代码的方法:
$country_name = Mage::app()->getLocale()->getCountryTranslation($country_code)
但我需要反过来。
那么Magento有什么方法可以解决它吗?
答案 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>