ethna の action・view は共通でテンプレートだけを切り替える。
shopA は
APPID/template/ja/shopA/Index.tpl
shopB は
APPID/template/ja/shopB/Index.tpl
さらに、shopXを追加したときにテンプレートが無ければ自動的に標準を使う。
APPID/template/ja/standard/Index.tpl
次のように実現する(実験的アプローチ)
shopA は
APPID/template/ja/shopA/Index.tpl
shopB は
APPID/template/ja/shopB/Index.tpl
さらに、shopXを追加したときにテンプレートが無ければ自動的に標準を使う。
APPID/template/ja/standard/Index.tpl
次のように実現する(実験的アプローチ)
class APPID_Controller extends Ethna_Controller に
を追加。
class APPID_ViewClass extends Ethna_ViewClass に
を追加。
ethna add-template ProductList
コマンドで基底(標準)のディレクトリに
APPID/template/ja/standard/ProductList.tpl
テンプレートが生成。必要なshop~だけコピーしてカスタマイズ。
あとは、エントリーポイント(入り口)やログイン属性によって action・view などで切替。
shopA のテンプレートを使うときは、
$controller =& $this->backend->getController();
$controller->setSwitchName( 'shopA' );
shopX のテンプレートを使うときは、
$controller->setSwitchName( 'shopX' );
切替先のテンプレートが無ければ、基底の standard/~ を採用される。
Ethna-2.3.7、Ethna-2.5.0-preview3、Ethna-2.5.0-preview5 で確認。
ただし、Ethna-2.5.0-preview5 で利用する場合
APPID/template/ja/standard/layout.tpl
APPID/template/ja/standard/error403.tpl
APPID/template/ja/standard/error404.tpl
APPID/template/ja/standard/error500.tpl
の継承を考慮していないので各切替先に同じものが必要。
注意:Ethnaではクラスファクトリで1つのレンダラーオブジェクトを使いまわすのでEthna_MailSender などを使った後、このgetSwitchName()してもTemplatedirが更新できないので注意が必要。その2に続く・・・