Magentoの住所でフリガナが保存されない

※この記事は、厳密には正しくありません。
下記を参考にされることを、お薦めいたします。

Magento1.4.2以降の顧客データモデルの変更に関する注意
http://rack990.sakura.ne.jp/archives/entry-804.html

また、バージョン1.6以上では、下記のエクステンションを使用すれば解決します。

Principle-Works Magentoエクステンション
日本語化コアエクステンション
http://principle-works.jp/magento-extension


Magentoの日本語化においては、「PepMaq Japan Package14」という大変優れたエクステンションがあります。
Magentoコネクトからこれを入れるだけで、

  • フリガナ対応
  • 姓名の順序入れ替え
  • 日本円表示で小数点以下の表示をしない
  • 都道府県入力
  • 日本語翻訳

ができます。

いやーすばらしい!!
・・・と思っていたんですが、Magentoのバージョン 1.4.2 での仕様変更に、フリガナ部分が対応しきれておらず、フォームから入力しても登録されずに空欄になってしまうのです。
(対象バージョンではないので、PEPMAQさんのせいではありません)

クライアントに納得していただければ、フリガナだけアンインストールして解決なのですが、そうもいきません。
悩んでいたら、解決方法が下記のサイトで見つかりました。

1.4.2.0でフリガナ(カナ)が登録できていないとき
http://lab.webarton.com/archives/338

名前のフリガナ項目追加
http://www.oenotria.com/index.php?option=com_content&view=article&id=57:furigana&catid=43:magento&Itemid=53

ただ、残念ながら上記の方法でうまく行くのはアカウントの方だけで、住所の方はやっぱりフォームから入力しても空欄のままです。
そこで、なんとかならないかとあちこちいじっていたら、なんだかできるようになりました(笑)
よくわからないでいじっている部分もありますので、間違っていたらご指摘いただけるとありがたいです。

なお、私は、直接データベースを操作してしまいましたが、データベースを直接いじらない方法も考えて見ました。
最後の方に書いておきましたので、ご参考にしていただければと思います。

データベース操作に関しては、下記の記事を参考にしました。

MAGENTOで顧客情報に「ふりがな」を追加する
http://rack990.sakura.ne.jp/archives/entry-561.html

それでは手順です。
MySQLを直接操作します。(私は、phpMyAdminで操作を行いました)

1.テーブル「eav_attribute」を確認

このテーブルに、attribute_codeが、firstnamekana および lastnamekana となっている行が2つずつあるか確認してください。
エクステンションがインストールされていればあるはずです。
ただし、環境によって attribute_id は異なっているかもしれません。

 attribute_id   entity_type_id   attribute_code 
124 1 firstnamekana
126 2 firstnamekana
125 1 lastnamekana
127 2 lastnamekana

もしなければ、attribute_code が、firstname および lastname のものをコピーして、それぞれに kana を付け足して、新しい行として挿入してください。
entity_type_id が、1のものと2のものがあるので、計4行です。
挿入したときに attribute_id が上記と異なってしまってもかまいません。

ここで、attribute_code が、firstname および lastname の行(計4行)と、firstnamekana および lastnamekana の行(計4行)の attribute_id をメモしておいてください。

2.テーブル「eav_entity_attribute」を確認

このテーブルに、「1.でメモした firstnamekana および lastnamekana の行の attribute_id」の行(計4行)があるか確認してください。
エクステンションがインストールされていればあるはずです。
私の環境の場合は、attribute_id が 124, 125 , 126, 127 のものになります。

 entity_attribute_id   entity_type_id   attribute_id 
305 1 124
306 1 125
307 2 126
308 2 127

もしなければ、「1.でメモした、firstname および lastname の行の attribute_id」の行(計4行)をコピーして、それぞれの attribute_id を、「1.でメモした firstnamekana および lastnamekana の行の attribute_id」に置き換えて、新しい行として挿入してください。
挿入したときに entity_attribute_id が上記と異なってしまってもかまいません。

3.テーブル「customer_form_attribute」に行を挿入

「1.でメモした firstnamekana および lastnamekana の行の attribute_id」に対応した行を挿入します。
下記に従い、attribute_id をあなたの環境のものに置き換えて挿入してください。

 form_code   attribute_id 
 adminhtml_customer  124
 checkout_register  124
 customer_account_create  124
 customer_account_edit  124
 adminhtml_customer_address  126
 customer_address_edit  126
 customer_register_address  126
 adminhtml_customer  125
 checkout_register  125
 customer_account_create  125
 customer_account_edit  125
 adminhtml_customer_address  127
 customer_address_edit  127
 customer_register_address  127

上記のサイトに書いてある手順を行われた方は、一部、すでに挿入されていると思います。
おそらく、form_code が、checkout_register の行と、attribute_id が、126 および 127 のものが挿入されていないのではないでしょうか?
無い行は、新しい行として挿入してください。

これで、住所でもフリガナが保存されると思います。

実はこの手順は、firstname および lastname に対応する行を複製して、firstnamekana および lastnamekana にしたのと同じことです。

データベースをいじらない方法

最初に紹介したサイトでは、データベースを操作せずに、ファイルの先頭にPHPのコードを付け足して対応しています。

そのコードは、おそらく、3.の手順と、同じ事を行っています。

そこで、3.の手順をPHPに置き換えてみました。
おそらく、上記のサイトで掲載されているコードを下記のものに置き換えればよいと思います。

※この操作は実際には行っていないので、試される方は十分注意してください。

<?php
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer', 'firstnamekana');
$attribute->setData('used_in_forms',
    array(
        'checkout_register',
        'customer_account_edit',
        'customer_account_create',
        'adminhtml_customer'
        ));
$attribute->save();
?>
<?php
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer', 'lastnamekana');
$attribute->setData('used_in_forms',
    array(
        'checkout_register',
        'customer_account_edit',
        'customer_account_create',
        'adminhtml_customer'
        ));
$attribute->save();
?>
<?php
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer_address', 'firstnamekana');
$attribute->setData('used_in_forms',
    array(
        'adminhtml_customer_address',
        'customer_address_edit',
        'customer_register_address'
        ));
$attribute->save();
?>
<?php
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer_address', 'lastnamekana');
$attribute->setData('used_in_forms',
    array(
        'adminhtml_customer_address',
        'customer_address_edit',
        'customer_register_address'
        ));
$attribute->save();
?>

1つ目と2つ目のブロックは、上記のサイトで掲載されているコードにおいて、
$attribute->setData(‘used_in_forms’, array()) に、checkout_register を追加しています。
これらは、アカウント情報に対するものです。

3つ目と4つ目のブロックは、住所に対するものになります。
$attribute = $eavConfig->getAttribute() の1つ目の引数が、customer_address になっているのがポイントです。

$attribute = $eavConfig->getAttribute() の1つ目の引数は、テーブル「eav_entity_type」で調べられます。
このテーブルの entity_type_id の値が、テーブル「eav_entity_attribute」の、entity_type_id に対応しています。
そして、entity_type_code の値が引数になっています。


ここまでくれば、住所でもフリガナが保存されるようになります。

ただ、PEPMAQさんのエクステンションは、管理画面の住所の編集の部分に対応されていないようで、姓名の順序などが英文表記の場合と同じになっています。
こちらは、該当するphtml を開いて位置を変えるだけなので、敷居は低いと思います。
「customer_eav_attribute」テーブルの、sort_orderフィールドの値を変えることで表示順を変えることができます。
私は、力尽きたのでそのままにしていますが、機会があれば追記しておきます。

(2010年6月29日 「Magentoの顧客管理でフィールドの順序を変える」 を公開しました)

この調子では、Magentoが日本で流行るのは、まだ先かなぁ。

Magentoの住所でフリガナが保存されない” に対して 5 件のコメントがあります

  1. mangeto初心者 より:

    初めまして、こんにちは。
    ご紹介いただいた方法で、見事フリガナを実装することが出来ました。有難うございます!
    フロントエンドの方は問題無く表示されているのですが、バックエンドでの顧客の住所の編集画面を見ると、何故か姓と名のフリガナが一番上の欄に位置しており、見づらいです。
    この欄の順序を変えるにはどのようにすれば宜しいでしょうか。(英語仕様なので姓名順序も逆ですね)該当(らしき)のphtmlを見たのですが、いまいち掴みかねます。
    お忙しい中失礼ですが、ご教授いただければ幸いです。

  2. magento初心者様、コメントありがとうございます。
    バックエンドの表示順序ですが、データベースの「customer_eav_attribute」テーブルの sort_orderフィールドの順になっているようです。
    (記事の内容が間違っていました。なにぶん、力尽きていたものですから・・・)
    「customer_eav_attribute」テーブルを見ただけでは、どれがどの値なのかわかりませんが、attribute_idフィールドの値をキーにして「eav_attribute」テーブルと付け合わせてやればわかります。
    そして、「customer_eav_attribute」テーブルの、sort_orderフィールドの値を振りなおしてやると、その順序で表示されます。
    「customer_eav_attribute」テーブルには、アカウント情報用の属性と住所用の属性が一緒くたになっているので、entity_type_idフィールドの値で判断します。
    1 = アカウント情報
    2 = 住所
    です。
    うーん、テキストだけだとわかりづらいですね。
    あとで記事にしておきます。

  3. mangento初心者 より:

    早速お返事有難うございます。
    >あとで記事にしておきます。
    有難うございます!自助努力もしてみますが、記事をお待ちしております。
    P.S.:私もまどマギ好きですよ。アニメは全然見ないタイプですが、友人に見ろと言われ見たらハマりました。

  4. 「Magentoの顧客管理でフィールドの順序を変える」を公開しました。参考になりましたら幸いです。

  5. Magentoの顧客管理でフィールドの順序を変える

    Magentoは、妙なところでシステマチックなので、仕組みがわかるまでは本当に大変です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です