2014-01-29 5 views
4

Я попытался найти код страны по названию страны. Так, к примеру, у меня есть «Нидерланды», мне нужно, чтобы получить «NL»Magento: Получить код страны по названию страны

Я знаю, что есть способ, чтобы найти форму имени кода:

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

Но мне нужно наоборот.
Итак, есть способы в Magento для его решения?

+0

возможно дубликат [Magento - Получить Код страны от имени - есть проще/более быстрый способ?] (HTTP: // StackOverflow .com/questions/18786233/magento-get-country-id-from-name-is-there-a-easy-quick-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 страны без взимания стран погрузочных. Поскольку все идентификаторы стран, сопоставленные с именами, хранятся в 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'];

Смежные вопросы