こんにちは。
職人見習いの高嶋です。
EC-CUBEは単一店舗用のECシステムですが、マルチテナント化のカスタマイズをして、ホスト名毎に表示上のデザインを変えたい場合の方法を説明します。
バージョンは2.11.x以降を対象とします。
- a.hoge.jp
- b.hoge.jp
上記2つのホスト名で同一サーバのEC-CUBEコンテンツにアクセス出来ると仮定します。
ここではDNS、Apacheの設定説明は割愛します。
そして、2組のテンプレートを予め管理画面上で作成します。
この説明もEC-CUBEを利用している方はご存知だと思うので省略します。
- a_pc, a_mobile, a_smartphone … a.hoge.jpアクセス時に表示したいPC、携帯、スマホテンプレート名
- b_pc, b_mobile, b_smartphone … b.hoge.jpアクセス時に表示したいPC、携帯、スマホテンプレート名
最初にも書きましたが、元々は単一店舗システムですので、URL情報はdata/config/config.php内に
define ('HTTP_URL', 'http://a.hoge.jp/'); define ('HTTPS_URL', 'https://a.hoge.jp/');
と定数定義され、あてがうテンプレート名はデータベーステーブルmtb_constantsに格納され、そこからdata/cache/mtb_constants.phpファイルに静的出力され
/** テンプレート名 */ define('TEMPLATE_NAME', 'a_pc'); /** モバイルテンプレート名 */ define('MOBILE_TEMPLATE_NAME', 'a_mobile'); /** スマートフォンテンプレート名 */ define('SMARTPHONE_TEMPLATE_NAME', 'a_smartphone');
という風に定数定義されています。
では、アクセスされたホスト名毎に使用するテンプレートを切り替えられるように改修します。
data/config/config.php内に以下の記述を追加します。
if( preg_match("/a.hoge.jp/s", $_SERVER['SCRIPT_URI'] ) ) { /** URL */ define ('HTTP_URL', 'http://a.hoge.jp/'); define ('HTTPS_URL', 'https://a.hoge.jp/'); /** テンプレート名 */ define('TEMPLATE_NAME', 'a_pc'); /** モバイルテンプレート名 */ define('MOBILE_TEMPLATE_NAME', 'a_mobile'); /** スマートフォンテンプレート名 */ define('SMARTPHONE_TEMPLATE_NAME', 'a_smartphone'); } else if( preg_match("/b.hoge.jp/s", $_SERVER['SCRIPT_URI'] ) ) { /** URL */ define ('HTTP_URL', 'http://b.hoge.jp/'); define ('HTTPS_URL', 'https://b.hoge.jp/'); /** テンプレート名 */ define('TEMPLATE_NAME', 'b_pc'); /** モバイルテンプレート名 */ define('MOBILE_TEMPLATE_NAME', 'b_mobile'); /** スマートフォンテンプレート名 */ define('SMARTPHONE_TEMPLATE_NAME', 'b_smartphone'); }
これにより、data/config/config.phpはdata/cache/mtb_constants.phpよりも先にロードされる為、define関数は一度定義すると上書き変更できないという特性を利用し、この記述が有効になります。
※この記事は、なかの人(piro556)が書いています。