ECCUBE 会員情報を共有する(ECCUBE2系)

ECCUBE3、4なら、↓こちらをもとに、共有可能だが、

EC-CUBEで複数DBで会員データを共通化する

今回は、ECCUBE2.17と、ECCUBE3のでの共有を試みる。

***

接続先の変更

ECCUBE3は、doctrineを使っているので、上記のリンク先の通り、
/src/Eccube/Resource/doctrine/Eccube.Entity.Customer.dcm.yml
などに、
table: [店舗Aのデータベース名].dtb_customer
と、1箇所記述するだけで済むけど、

 

ECCUBE2.17は、大量の書き換えが必要です。

とりま、’dtb_customer’を含むファイルをgrepしてみると、

/data/class/helper/SC_Helper_DB.php
/data/class/helper/SC_Helper_Customer.php
/data/class/helper/SC_Helper_CSV.php
/data/class/helper/SC_Helper_Purchase.php
/data/class/helper/SC_Helper_Mail.php
/data/class/pages/products/LC_Page_Products_Detail.php
/data/class/pages/entry/LC_Page_Entry_EmailMobile.php
/data/class/pages/regist/LC_Page_Regist.php
/data/class/pages/forgot/LC_Page_Forgot.php
/data/class/pages/admin/total/LC_Page_Admin_Total.php
/data/class/pages/admin/products/LC_Page_Admin_Products.php
/data/class/pages/admin/customer/LC_Page_Admin_Customer_Edit.php
/data/class/pages/admin/LC_Page_Admin_Home.php
/data/class/pages/mypage/LC_Page_Mypage_Favorite.php
/data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.php
/data/class/SC_CustomerList.php
/data/class/SC_Customer.php

 

うへ・・・

 

一応、汎用的に使えるように、config .phpの上位に、
define(‘extrenal_db’, ‘店舗Aのデータベース名’)を宣言し、
定数を頭に足します。

‘dtb_customer’ >> 置換 >> extrenal_db. ‘dtb_customer’

直書きだとあれなんで、全部、class_exに派生で制作ね。

 

テーブル項目の差分

足りない項目を、ECCUBE3側に足します。
反対でもいいのですが、今回は、3系が運用中で、2系の追加なので。

  • mailmaga_flg >> smallint(6)
  • point >> decimal(10,0)
  • reminder >> smallint(6)

※パスワードが共有になるので、AUTH_MAGICは同じものにすること。

 

さて、次の問題、、、

customer_id の割当て

2系は、シーケンスIDを別のテーブルで管理しているおり、
phpMyAdminで見ると、邪魔だから、なんとかスマートにできないか?
と、試行錯誤した↓、が割と役に立つ。

ECCUBE 2.13.x シーケンステーブル

 

実際、主キーcustomer_idにNULLを渡せば、
AutoIncの値がセットされるので、この辺を加工。

 

※ECCUBE3には、メルマガの機能がなく、
プラグインで実装されますが、この機能は、連動できません。
※独自に組むしかない!

 

あと、関連テーブルあたりも。こんなかんじで。

 

ECCUBE 会員情報を共有する(ECCUBE2系)