Magento 1.9.1でチェックアウトページ(one page checkout)とマイアカウントページと管理者ページに項目を追加する方法です。
principleworksさんの日本語パックを入れていますので、これから説明する内容は日本語ベースで説明します。。英語版をそのままお使いの方は読み替えてご参照ください。
日本語化の方法はこちら:Magento を日本語化する方法
以前の投稿で、Magentoで会員情報に項目を追加する方法を紹介しましたが、そちらは基本会員情報に項目を追加する方法です。は? っていう感じだと思うので画面で説明します。
ユーザーのアカウント管理画面で言うと、”アカウント情報”に表示されるものが基本会員情報(と私は呼んでいます)
今回の投稿で説明するのは、住所エリアに項目を追加する方法です。アカウント管理画面で言うところの”アドレス帳”から”請求書変更”もしくは”配送先変更”で編集する箇所です。
チェックアウト画面で言うと”請求先情報”、”発送先情報”に当たる部分です。下の例では”会社名カナ”を新たに追加しています。性(カナ)、名(カナ)もMagentoをインストールした直後は入っていませんが、Magento を日本語化する方法にしたがって日本語パックを入れると自動で入ってきます。
はじめに、これからやることの概要を説明します。住所に項目を追加する場合、システム上、追加が必要な箇所は全部で3つ。
1.管理者画面:管理者がユーザーからお願いされたりした時に編集するため
2.マイアカウント画面:ユーザーがログインした後に自分の情報編集したいときのため
3.チェックアウト画面:ユーザーがチェックアウトするときに住所情報を編集したいときのため
今回は”会社名カナ”という項目を追加してみます。
くどいようですが、冒頭で申し上げた日本語パックをインストールしていることを前提としています。デフォルトのままだと編集するファイルが違うのであしからず。
Contents
管理者画面に項目を追加する
1.データベースに必要なカラム・行を追加します。
編集するテーブルは全部で4つ。
(Magentoは拡張性が高いことで有名ですが、そのためにDBのテーブル数は非常に多いです。一般的なECサイトの2倍以上はあると思います。どこで何をしているかも慣れないと意味不明です。。)
カラム名やIDのつながりを見れば関連がわかると思うので詳しい説明は省きます。実際に私が発行したクエリをそのまま記載します。
STEP1
[crayon]
insert into magento_test.eav_attribute
(
entity_type_id,
attribute_code,
backend_type,
frontend_input,
frontend_label,
is_user_defined,
is_required,
default_value
)
values (2,'company_kana', 'varchar', 'text', 'company_kana', 1, 1, NULL)
[/crayon]
STEP2
[crayon]
insert into magento_test.eav_entity_attribute
(
entity_type_id,
attribute_set_id,
attribute_group_id,
attribute_id
)values (
2, 2, 2, 215)
[/crayon]
STEP3
[crayon]
insert into magento_test.customer_eav_attribute
(attribute_id,is_visible)
values(
215,1)
[/crayon]
STEP4
[crayon]
insert into magento_test.customer_form_attribute
(form_code,attribute_id)
values('adminhtml_customer_address',215)
insert into magento_test.customer_form_attribute
(form_code,attribute_id)
values('customer_address_edit',215)
insert into magento_test.customer_form_attribute
(form_code,attribute_id)
values('customer_register_address',215)
[/crayon]
ここまで実行すると、管理者画面で顧客情報を閲覧すると、項目が追加されているのが確認できます。
ここで編集して保存を押すと、もうちゃんと保存されるようになっています。さすがMagento。やりますね。
マイアカウント画面に項目を追加する
1. 下記のファイルを編集します。
\app\design\frontend\base\default\template\jpcore\customer\address\edit.phtml
今回は”会社名”の下に追加項目を表示させたいので、
"company"で検索し、
[crayon]
[/crayon]
これでマイアカウント画面に追加項目が表示されます。
表示されない場合、Magentoキャッシュをクリアしてください。
キャッシュのクリア方法:
システム - キャッシュ管理とすすみ、”Magentoのキャッシュをクリアする”を押下します。
チェックアウト画面に項目を追加する
1. 請求先住所に追加するために下記のファイルを編集します。
\app\design\frontend\base\default\template\jpcore\checkout\onepage\billing.html
マイアカウントへの追加同様、会社名の下に挿入するので、下記のコードを"company"項目編集部の真下に配置します。
[crayon]
[/crayon]
2. 発送先住所に追加するために下記のファイルを編集します。
\app\design\frontend\base\default\template\jpcore\checkout\onepage\shipping.html
マイアカウントへの追加同様、会社名の下に挿入するので、下記のコードを"company"項目編集部の真下に配置します。
[crayon]
[/crayon]
※billing.phtmlを編集してからshipping.phtmlを編集するときにコードをコピぺした人は下記注意してください。
name="shipping[company_kana]""
id="shipping:company_kana"
このあたりがbillingとshippingで記載が異なるところです。これが正しくないとチェックアウトで発送先住所をセーブできず、必須項目エラーで先にすすめません。私はここでしばらくハマりました。。。
getAddress()の中身を確認する方法
余談ですが、値を引っ張っている$this->getAddress()->getCompany_kana()について、getAddress()に何が入っているか気になりませんか?私は気になりました。ということで下記のコードを今回挿入したコードの直前とかに置くと、arrayの中身が見れます。
[crayon]
getAddress()->getData());
?>
[/crayon]
3. configファイルに追加項目を宣言します。
\app\code\community\Rack\Jp\Core\etc\config.xml
globalタグの中に入れる必要があるので、/global の直前に下記のコードを挿入します。
298行目あたりです。
[crayon]
これがないと管理者画面や、マイアカウント画面で編集した内容がチェックアウト画面で引っ張ってこれず、空白になってしまします。
追記:2015年7月7日
複数の項目を追加するときは、追加する場所に注意してください。
customer_address も同様、この中に追加項目を足していきます。
4. オーダーテーブル、見積もりテーブルに項目を追加します。
対象のテーブルは下記の二つ。
sales_flat_order_address
sales_flat_quote_address
追記:2015年4月13日
このままだとインポート・エクスポートで追加した項目を認識してくれませんでした。そこで下記のファイルに追記します。
\app\code\community\Rack\Jp\Core\etc\config.xml
adminタグの中filedsetsタグの最後に下記のコードを挿入します。
298行目あたりです。
[crayon]
[/crayon]
ファイルを保存したらキャッシュをクリアしてください。するとインポート・エクスポートで追加した項目が表示されます。
各種表示ポイントへ追加する方法(おまけ)
今回追加した項目をオーダー確認メールや、管理者画面などに追記したい人は下記の箇所を編集してください。
※この手順は私は必要なかったので、表示確認はしていません。
管理画面で、システム - 顧客設定 に進み、住所表記テンプレートタブを開く
テキストバージョンやHTMLバージョンごとに編集できます。
こんな感じのコードがあるので、他の項目をコピペして、新しく追加した項目名に書き換えてください。
[crayon]
{{depend prefix}}{{var prefix}} {{/depend}}{{var lastname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var firstname}}{{depend suffix}} {{var suffix}}{{/depend}}, {{var postcode}}, {{var country}}, {{var region}}, {{var city}}, {{var street}}
[/crayon]
参照:http://excellencemagentoblog.com/blog/2011/11/29/magento-adding-custom-field-to-customer-address/