Magento: Region API names = null - PullRequest
       0

Magento: Region API names = null

1 голос
/ 14 декабря 2011

В Magento 1.5 я звоню в региональный API.Он отлично работает в моей среде разработки и возвращает следующее:

[{"region_id":"66","code":"AB","name":"Alberta"},
{"region_id":"67","code":"BC","name":"British Columbia"},
{"region_id":"68","code":"MB","name":"Manitoba"},
{"region_id":"69","code":"NL","name":"Newfoundland and Labrador"},
{"region_id":"70","code":"NB","name":"New Brunswick"},
{"region_id":"71","code":"NS","name":"Nova Scotia"},
{"region_id":"72","code":"NT","name":"Northwest Territories"},
{"region_id":"73","code":"NU","name":"Nunavut"},
{"region_id":"74","code":"ON","name":"Ontario"},
{"region_id":"75","code":"PE","name":"Prince Edward Island"},
{"region_id":"76","code":"QC","name":"Quebec"},
{"region_id":"77","code":"SK","name":"Saskatchewan"},
{"region_id":"78","code":"YT","name":"Yukon Territory"}]

Тогда, когда этот API вызывается в моей промежуточной среде, результат остается тем же, за исключением того, что каждое имя одиночного файла равно нулю, даже если идентификатор и кодхороши:

[{"region_id":"66","code":"AB","name":null},
{"region_id":"67","code":"BC","name":null},
{"region_id":"68","code":"MB","name":null},
{"region_id":"69","code":"NL","name":null},
{"region_id":"70","code":"NB","name":null},
{"region_id":"71","code":"NS","name":null},
{"region_id":"72","code":"NT","name":null},
{"region_id":"73","code":"NU","name":null},
{"region_id":"74","code":"ON","name":null},
{"region_id":"75","code":"PE","name":null},
{"region_id":"76","code":"QC","name":null},
{"region_id":"77","code":"SK","name":null},
{"region_id":"78","code":"YT","name":null}]

Есть идеи о том, что может вызвать это?

Ответы [ 2 ]

5 голосов
/ 23 апреля 2012

Не знаю, нашли ли вы решение, но у меня была та же проблема.Кажется, это ошибка в коде ядра magento (подробно в region-api).Очевидно, ошибка существует до 3 лет и более ... Тем не менее вот что я нашел, чтобы решить ее:

Перейти к Mage_Directory_Model_Region_Api (в Magento 1.6.2 этот файл находится в app / code /core / Mage / Directory / Model / Region / Api.php ) и измените следующую строку ниже:

class Mage_Directory_Model_Region_Api extends Mage_Api_Model_Resource_Abstract
{
    /**
    * Retrieve regions list
    *
    * @param string $country
    * @return array
    */
    public function items($country)
    {
        try {
            $country = Mage::getModel(’directory/country’)->loadByCode($country);
        } catch (Mage_Core_Exception $e) {
            $this->_fault(’country_not_exists’, $e->getMessage());
        }

        if (!$country->getId()) {
            $this->_fault(’country_not_exists’);
        }

        $result = array();
        foreach ($country->getRegions() as $region) {
            $region->setName($region->getName());  // This is the important line to set the name
            $result[] = $region->toArray(array(’region_id’, ‘code’, ‘name’));
        }

        return $result;
    }
} 
1 голос
/ 17 декабря 2014

Рекомендую не изменять основной код! Исправление работает, но лучше переписать файл или хотя бы скопировать его в локальный файл.

Добавить переписать в config.xml:

<config>
    <modules>
        <Module_Namespace>
            <version>0.1.0</version>
        </Module_Namespace>
    </modules>
    <global>
        <models>
            <directory>
                <rewrite>
                    <region_api>Module_Namespace_Model_Region_Api_Api</region_api>
                </rewrite>
            </directory>
        </models>
    </global>
</config>

Скопируйте Mage_Directory_Model_Region_Api в Module_Namespace_Model_Region_Api_Api и примените исправление в строке 56:

class Module_Namespace_Model_Region_Api_Api extends Mage_Api_Model_Resource_Abstract
{
    /**
     * Retrieve regions list
     *
     * @param string $country
     * @return array
     */
    public function items($country)
    {
        try {
            $country = Mage::getModel('directory/country')->loadByCode($country);
        } catch (Mage_Core_Exception $e) {
            $this->_fault('country_not_exists', $e->getMessage());
        }

        if (!$country->getId()) {
            $this->_fault('country_not_exists');
        }

        $result = array();
        foreach ($country->getRegions() as $region) {
            $region->setName($region->getName()); //Fix
            $result[] = $region->toArray(array('region_id', 'code', 'name'));
        }

        return $result;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...