Magentoのskin_dirを動的に設定する

Magentoでサブドメイン毎に独自のテーマを管理できるようにskin_dirを階層化する

skin_dirとdesign_dirをフレキシブルにしただけではテーマを動的に管理できない

Magentoのindex.phpを共有するタイプのマーケットプレイスを構築している。

サブドメイン毎にテーマを個別に開発できるようにする必要があるので、標準で、

/skin

になっている階層を

/skin/[サブドメイン名]

という階層にカスタマイズしないといけない。

Magentoの場合は、skin_dirの他に

design_dir

というテーマ関連の階層が存在し、

  • skin_dir → 静的ファイル
  • design_dir → HTMLを構成するファイル

上の2つの階層にテーマ関連のファイルを保存しているので、双方のディレクトリをサブドメイン単位で動的に設定してみた。

index.phpでテーマディレクトリを階層化

Magentoのindex.phpでグローバルレベルでテーマをサブドメイン単位で階層化することができる。

$new_dirs = array(
  'design_dir' => MAGENTO_ROOT."/app/design/".$_SERVER['SERVER_NAME'],
  'skin_dir' => MAGENTO_ROOT."/skin/".$_SERVER['SERVER_NAME']
);

Mage::run($mageRunCode, $mageRunType, $new_dirs);

しかし、この設定だけだとskin_dirは、階層化されず画像やCSSが取得できない。

var_dump($this->_data['skin_dir']);

として確認すると、

/skin/[サブドメイン名]

と表示されるものの、

var_dump(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN));

フロント側で利用しているskinのパスを表示するMagento関数でパスを確認してみると、

/skin

と表示されデフォルトの設定のままパスが出力される。

おまけではないが、Magentoのデバッグ知識として、テーマのhead領域を出力方法は、

var_dump($this->getLayout()->getBlock('head')->toHtml(););

上のコードで可能であることを補足しておこう。

フロント側でもskin_dirを変更する

フロント側のskin_dirを変更するためには、Magentoの管理画面から設定することが可能。

System → Configuration → サイドバーのWeb

に進むと

  • Unsecure
  • Secure

を設定する項目が表示され、この画面からフロント側のskin_dirを変更することが出来る。

magento-skin-url

画像の通り設定すれば、skin_dirは、

/skin/sub2.magento.local

に変更される。

管理画面からではなく、プログラムでセットアップする場合は、

Magentoのストアセットアップスクリプトに書いてある方法をパラメータを変更することで自動セットアップすることが可能。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Magentoのskin_dirを動的に設定するの記事にコメントを投稿