2013-09-13 5 views
5

Мне нужно загрузить двухзначный идентификатор страны ISO2 для данного названия страны.Magento - получить идентификатор страны от имени - есть ли более простой/быстрый способ?

Прямо сейчас, я использую следующий метод, чтобы сделать это:

// Method to Get countryId from CountryName 
function getCountryId($countryName) { 
    $countryId = ''; 
    $countryCollection = Mage::getModel('directory/country')->getCollection(); 
    foreach ($countryCollection as $country) { 
     if ($countryName == $country->getName()) { 
      $countryId = $country->getCountryId(); 
      break; 
     } 
    } 
    $countryCollection = null; 
    return $countryId; 
} 

Использование:

var_dump(getCountryId('Germany')); 

Выходы:

string(2) "DE" 

Существует ли проще/быстрее способ сделать это вместо того, чтобы загружать сборку страны и проходить через нее каждый раз?

+0

К сожалению, каталог/страна-модель содержит только метод loadByCode, а не loadByName. Вы можете реализовать такой метод самостоятельно, но поскольку у вас уже есть рабочее решение, это может быть просто излишним. –

ответ

2

Удивительно, но цикл является единственным способом вы этого добиться.

Названия стран хранятся в файлах XML в lib/Zend/Locale/Data/, и они организованы по языку (en, es, fr), а затем по коду страны, а не по названию страны.

Поскольку это не таблица SQL, вы не можете добавить предложение WHERE (используя Magento's addFieldToFilter()), так что вы все равно будете циклически перемещаться по узлам XML.

+0

Вы уверены, что это работает? Я получаю следующую ошибку: Неустранимая ошибка: исключить исключение «PDOException» с сообщением «SQLSTATE [42S22]: столбец не найден: 1054 Неизвестное имя столбца в разделе« where »в/home/www-data/public_html/lib/Zend/Db/Statement/Pdo.php: 228 – Latheesan

+0

Вы правы. Эта коллекция хранится иначе, чем я видел раньше. Вы должны зацикливаться –

0

Другого выхода из-за переводов нет. Это функция для получения названия страны, вы не можете повернуть его вспять

public function getName() 
{ 
    if(!$this->getData('name')) { 
     $this->setData(
      'name', 
      Mage::app()->getLocale()->getCountryTranslation($this->getId()) 
     ); 
    } 
    return $this->getData('name'); 
} 
Смежные вопросы