Php 从Magento提取国家名称(或缩写)

Php 从Magento提取国家名称(或缩写),php,magento,country,Php,Magento,Country,我正在尝试获取国家名称“美国”(或缩写“USA”/“US”)。我在以下方面尝试了一系列变化: echo Mage::getSingleton('customer/session')->getCustomer()->getCountry(); $countryName = Mage::getModel('directory/country')->load(Mage::getSingleton('customer/session')->getCustomer()->ge

我正在尝试获取国家名称“美国”(或缩写“USA”/“US”)。我在以下方面尝试了一系列变化:

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分(美国)。但在那之后,我无法找到如何将其映射到一个合适的名称或鼻涕虫

我看到过一些帖子,其中程序员得到了所有国家的名字和id的列表,但我不想重复所有的组合来找到名字

蒂亚

编辑: 根据钟表匠的建议,我尝试过:

$customer = Mage::getSingleton('customer/session')->getCustomer();
error_log(print_r($customer, true));
$countryCode = $customer->getDefaultBillingAddress()->getCountry();
但是,第三行调用getCountry()失败。可能getDefaultBillingAddress()未在对象上返回。错误消息:

PHP Fatal error:  Call to a member function getCountry() on a non-object in ...
想法?$customer对象返回正确,尽管类是MYCLIENT\u customer\u Model\u customer对象。。。也许它没有扩展适当的父级以允许它访问getCountry

编辑:(解决方案):作为答案添加

也许这有助于:

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

也许这有助于:

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

发件人:

通常,国家等信息根本不存储在客户实体中,我不确定您为什么会得到“6”


通常情况下,国家之类的信息根本不存储在客户实体中,我不确定您为什么会得到“6”


因此,我通过以下方式解决了这个问题:

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);

谢谢你的帮助。你是对的,这是从adminhtml添加到客户实体的属性。我必须经历所有这些爵士乐才能接触到乡村的鼻涕虫,例如:“美国”。

因此,我通过以下方式解决了这个问题:

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);

谢谢你的帮助。你是对的,这是从adminhtml添加到客户实体的属性。我必须经历所有这些爵士乐才能接触到这个国家的鼻涕虫,例如:“美国”。

也许这是因为EAV系统,也许是我们已经建立或扩展的东西。再一次,我刚刚被投入到这个项目中,我对Magento的总体了解是slim/nil。如果失败,那么对getCountry()的调用就不起作用了,因此getDefaultBillingAddress()可能没有返回对象。我的OP中的实现。这表明您的站点已被更改为不使用单独的地址对象,或者您正在检查的客户根本没有任何地址。当我查看数据库中的
directory\u country
表时,它没有数字字段,因此看不出应该如何使用值“6”。也许有一个本地扩展(检查MYCLIENT文件夹)正在以您可以复制的方式使用该值。谢谢,我一弄明白就回来汇报。解决了,+1给你帮助。也许这是因为EAV系统,也许是我们已经建立或扩展的东西。再一次,我刚刚被投入到这个项目中,我对Magento的总体了解是slim/nil。如果失败,那么对getCountry()的调用就不起作用了,因此getDefaultBillingAddress()可能没有返回对象。我的OP中的实现。这表明您的站点已被更改为不使用单独的地址对象,或者您正在检查的客户根本没有任何地址。当我查看数据库中的
directory\u country
表时,它没有数字字段,因此看不出应该如何使用值“6”。也许有一个本地扩展(检查MYCLIENT文件夹)正在以您可以复制的方式使用该值。谢谢,我一弄明白就回来报告。解决了,+1给你帮助。如何获取完整的国家名称而不是国家代码,这是我的代码只返回国家代码:@mikuHow获取完整的国家名称而不是国家代码,这是我的代码只返回国家代码:@miku