share facebook facebook twitter menu hatena pocket slack

2011.12.02 FRI

EC-CUBE ホスト名毎に表示テンプレートを切り替える

櫛田 草平

WRITTEN BY 櫛田 草平

こんにちは。
職人見習いの高嶋です。

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)が書いています。

櫛田 草平

櫛田 草平

cloudpackで運用、保守、構築、夜間対応を担当しており、日々様々な課題に対応していますのでこの経験を記事にしていけたらと思います。 櫛田 草平

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。