Извлечение названия страны (или инициалов) из Magento - PullRequest
1 голос
/ 09 августа 2011

Я пытаюсь получить название страны "США" (или инициалы "США" / "США"). Я перепробовал несколько вариантов:

echo Mage::getSingleton('customer/session')->getCustomer()->getCountry();
$countryName = Mage::getModel('directory/country')->load(Mage::getSingleton('customer/session')->getCustomer()->getCountry())->getName();
error_log("countryName = $countryName");

Первый звонок «кажется» сработает, так как я получаю обратно 6 (США). Но после этого я не могу выяснить, как сопоставить это с правильным именем или слагом.

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

ТИА!

EDIT: По совету часовщиков, я попробовал:

$customer = Mage::getSingleton('customer/session')->getCustomer();
error_log(print_r($customer, true));
$countryCode = $customer->getDefaultBillingAddress()->getCountry();

Однако 3-я строка не работает с вызовом getCountry (). Возможно, getDefaultBillingAddress () не возвращается для объекта. Сообщение об ошибке:

PHP Fatal error:  Call to a member function getCountry() on a non-object in ...

Мысли? Объект $ customer возвращается корректно, хотя CLASS является объектом MYCLIENT_Customer_Model_Customer ... возможно, он не расширяет надлежащий родительский элемент, чтобы дать ему доступ к getCountry?

Редактировать: (Решение): Добавлено как ответ.

Ответы [ 3 ]

14 голосов
/ 09 августа 2011

Обычно такая информация, как страна, вообще не сохраняется в объекте клиента, я не уверен, почему вы получаете «6».

$customer = Mage::getSingleton('customer/session')->getCustomer();
$countryCode = $customer->getDefaultBillingAddress()->getCountry();
// $countryCode looks like "US"
$country = Mage::getModel('directory/country')->loadByCode($countryCode);
echo $country->getName(); // looks like "United States"
3 голосов
/ 09 августа 2011

Может быть, это поможет:

$countryName = 
    Mage::getModel('directory/country')->load($countryCode)->getName();

От: http://blog.chapagain.com.np/magento-get-country-and-region-collection/

0 голосов
/ 09 августа 2011

Итак, я решил это, выполнив:

customer_model_object = Mage::getSingleton('customer/customer');
$session = Mage::getSingleton('customer/session');
$country_name = $customer_model_object->load($session->getId())->getResource()->getAttribute('country')->getFrontend()->getValue($customer_model_object);

Спасибо за помощь. Вы были правы, clockworkgeek, это атрибут, добавленный к сущности клиента из adminhtml. Мне пришлось пройти через весь этот джаз, чтобы получить доступ к слизнякам страны, например: «Соединенные Штаты».

...