2011-08-08 10 views
1

私は国名「United States」(または頭文字「USA」/「US」)を取得しようとしています。私は、次のバリエーションの束を試してみた:Magentoから国名(またはイニシャル)を抽出します

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バック(USA)を取得するよう最初の呼び出しは、動作するように「そうです」。しかしその後、私はそれを適切な名前やスラッグにマップする方法を見つけることができません。

私はプログラマーがすべての国名とIDのリストを取得した記事を見ましたが、名前を見つけるためにすべての組み合わせを繰り返す必要はありません。

TIA!

EDIT:clockworkgeeks'の提案パー は、私が試してみた:

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

しかし、3行目は、()はgetCountryへの呼び出し/ wは失敗します。おそらく、getDefaultBillingAddress()がオブジェクトに戻っていない可能性があります。エラーメッセージ:

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

考えられますか? CLASSはMYCLIENT_Customer_Model_Customerオブジェクトですが、$ customerオブジェクトが正しく戻ってきています...おそらくgetCountryにアクセスできるように適切な親を拡張していませんか?

編集:(解決策):回答として追加されました。

答えて

-1

だから、私は実行して、これを解決:助けを

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から顧客エンティティに追加された属性です。私はこのジャズを通って国のスラッグにアクセスしなければなりませんでした。例: "米国"。

14

通常の情報は、あなたが「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" 
+0

おそらくこれは、EAVシステムとおそらく私たちが構築し拡張したもののためです。再び、私は文字通りこのプロジェクトに落とされました。私の全体的なマゼンタの知識はスリム/無しです。 –

+0

これが失敗すると、getCountry()の呼び出しが機能しないため、getDefaultBillingAddress()がオブジェクトを返さない可能性があります。私のOPでの実装。 –

+0

これは、サイトが別のアドレスオブジェクトを使用しないように変更されているか、または検査している顧客に単にアドレスがないことを示しています。データベースの 'directory_country'テーブルを見ると数値フィールドがないので、どのように値" 6 "を使用するのか分かりません。おそらくコピー可能な方法でその値を使用しているローカル拡張(MYCLIENTフォルダを確認)があります。 – clockworkgeek

関連する問題