[eccube3]越境EC作成のメモ

これを読めば完璧というわけではない。
詳細に書いててもきりがないので要点とかをまとめる。

完成イメージ

  • 全部英語
  • 海外からの注文に対応

要するに、日本以外からの注文に対応できるサイトにしたい。

必要プラグイン

各国別に決済を構えるなんてのは無理なので、守備範囲が広いっぽいPayPalを採用。名前のふりがなとか住所の郵便番号部分とか、日本のフォーマットじゃどうしようもない部分をカスタマイズするためのプラグインを導入。

3.0系|海外住所入力プラグイン|トエビス株式会社
https://www.ec-cube.net/products/detail.php?product_id=1684

3.0系|ペイパル エクスプレス チェックアウト 決済プラグイン(3.0系)|PayPal Pte. Ltd. 東京支店
https://www.ec-cube.net/products/detail.php?product_id=984

この2つ、もしかすると自分の組み方が悪いのかもしれないけど、クーポンとポイントプラグインとの共存ができない。各所で処理が行われなくてバグる。

翻訳について

ECCUBE3には多言語化の仕組みは存在しないので、地道に翻訳していくしかない。テンプレートだったりシステムだったりjsだったりで手を入れる箇所がめっちゃある。プラグインで生成する部分もあるから環境によりけりになる。

そもそも存在してるかわからんけど海外版のパッケージがあったとして、ショップは英語表記でいいけど管理画面まで英語になっちゃったら運営が悲鳴を上げるので、ほんとやるせない。

海外住所入力プラグインについて

これは記入フォームのフォーマットを変更する仕組みなので、国名はマスターデータのやつを自分で変えないといけない。めんどいけど頑張らないといけない。

海外からの注文に対応するためのものであって他国語に対応するためのものじゃないからね。

フォームが切り替わったときに表示されるplaceholderはjsで管理されていて、「~_script.twig」に書いてある。必須項目は非表示にしてるだけなので、空欄はだめなんでテキトーなものを代入してある。それもここで設定されてる。

  • app/Plugin/OverseasAddress/Resource/template/default/contact_script.twig
  • app/Plugin/OverseasAddress/Resource/template/default/customer_script.twig
  • app/Plugin/OverseasAddress/Resource/template/default/entry_script.twig
  • app/Plugin/OverseasAddress/Resource/template/default/shopping_nonmember_script.twig
  • app/Plugin/OverseasAddress/Resource/template/default/shopping_shipping_edit_script.twig

国名変更時の項目変更は項目名ごとごっそりいく。
表示される項目名のタグは「{{ form_label(form.****) }}」じゃなくて「{{ form_label(form.****_overseas) }}」だから、プラグイン側で用意されてることが分かる。以下のファイルを修正する。

  • app/Plugin/OverseasAddress/Form/Extension/CustomerAddressTypeExtension.php
  • app/Plugin/OverseasAddress/Form/Extension/CustomerTypeExtension.php
  • app/Plugin/OverseasAddress/Form/Extension/EntryTypeExtension.php
  • app/Plugin/OverseasAddress/Form/Extension/NonmemberTypeExtension.php

項目名「国」に関しては違うところで処理してるので注意。

app/Plugin/OverseasAddress/Form/Type/CountryType.php

ついでに購入時の自動送信メール文も変えてくれて、というかこいつが優先されるのでテンプレートを弄っても反映されない。配送情報やらなんやらの部分を編集する場合は「order_mail_overseas_address.twig」。

相性問題といえば注文番号設定プラグインにも干渉してるからホント凶悪だわこれ。購入後の自動送信メールに反映されなくなる。問い合わせを受けてもよくわからないことになっちゃう可能性が高いので無効化するしかない。

入力項目部の翻訳

項目名だったりplaceholderだったり、上記プラグインで管理してるっちゃしてるけど全部をカバーできてるわけじゃない。ECCUBE本体側の修正も必要になる。

  • /src/Eccube/Resource/locale/message.ja.yml
  • /src/Eccube/Resource/locale/validator.ja.yml

とりあえずこの2つを修正。
「admin.~」は管理画面上の表示だから、管理者が日本語大丈夫ならスルーしても平気。

src/Eccube/Form/Type/SearchProductType.php

商品検索のとこのはこれを修正。同ディレクトリでは他にも出力関係のを設定してるファイルがあるので一通り見たほうが良い。ファイル数が多すぎていちいちピックアップするのがめんどすぎる。

src/Eccube/Resource/template/default/Form/form_layout.twig

<span class="required">必須</span>

とか郵便番号検索、郵便番号から自動入力のやつはここに入ってる。
コメントタグは場所により効かないっぽいからファイル自体を複製してバックアップするのが面倒が少ないかもしれない。

確認事項というか注意点というか

・新規会員登録
・新規会員登録 確認
・カート お客様情報の入力
・カート ご注文内容のご確認
・カート ご注文内容のご確認 送料計算
・カート お届け先の指定
・カート お届け先の追加
・カート ゲスト情報の変更
・カート ゲストお届け先の変更
・注文メール
・Myページ ご注文履歴詳細
・Myページ 会員情報編集
・Myページ お届け先一覧
・Myページ お届け先編集
・お問い合わせ
・お問い合わせ 確認
・お問い合わせ メール
・管理 会員マスター
・管理 会員登録
・管理 受注登録
・管理 受注CSVダウンロード
・管理 配送CSVダウンロード
・管理 配送方法設定 国ごとに送料設定

https://www.ec-cube.net/products/detail.php?product_id=1684

管理画面上のメール通知は対応してない??

php7.3下の動作について

会員登録ができない

Front・Admin共に登録ができない。
海外住所入力時、TELとFAXが「有効な数値ではありません」とエラーを吐く

TEL・FAXが弾かれる

「国番号から」ということで「+」と数字が通らないとダメなんだけどそれが通用しない。郵便番号は通るのになんでだよ。DB側はただのテキストだからここは問題じゃない。バリデーションをいじったら回避できるんじゃないのということに思い至った。

バリデーション設定

プラグインで生成した項目のバリデーションなので、設定箇所はECCUBE側じゃない。

app/Plugin/OverseasAddress/Form/Extension/
ここにある。
大半のファイルにTELとFAXの設定が入ってるんでそれをいじっていく。
なんで一元管理じゃないんだっていう不思議はある。

変更方法

'label' => '電話番号',
'required' => true,
'mapped' => false,
'attr' => array(
    'placeholder' => '国番号から入力',
),
'constraints' => array(
    new Assert\NotBlank(array()),
    new Assert\Regex(array(
        'pattern' => "/^[\+\d-() ]+$/u",
    )),
),

こういうのを

'label' => '電話番号',
'required' => true,
'mapped' => false,
'attr' => array(
    'placeholder' => '国番号から入力',
),
'constraints' => array(
    new Assert\NotBlank(array()),
    new Assert\Regex(array(
        'pattern' => '/^[[:graph:][:space:]]+$/i',
    )),
),

こうする。

「pattern」のところを差し替える。
郵便番号のやつを持ってきただけなんだけど、まあこれで動く。
FAXも同じようにすれば蹴られなくなる。

コメント

タイトルとURLをコピーしました