ヘッダやフッタは常に共通で、
/data/Smarty/templates/default/header.tpl
/data/Smarty/templates/default/footer.tpl
が使用されます。
また、ユーザで作成したテンプレがあれば、
/html/user_data/packages/default/header.tpl
/html/user_data/packages/default/footer.tpl
が優先して使用されます。
これでは、たとえばログイン画面などの一部のページだけ全然別のヘッダにしたいんだよ、といった場合に対応できません。
一番手っ取り早いのはExクラスで適当にフラグを突っ込んで、header.tplで場合分けでしょう。
/data/class_extends/page_extends/mypage/LC_Page_Mypage_Login_Ex.php
/data/Smarty/templates/default/header.tpl
ですがまあ正直どうなのという作り方ですね。
どうにかしてみましょう。
テンプレートの割り当ては
/data/class/SC_View.phpのSC_View::SC_View()、コンストラクタで行っています。
で、困ったことにLC_Page_Mypage_Login等のクラスはLC_Page_Mypage_Login::process()内でSC_Viewをインスタンス化して表示まで一気に行ってしまっています。
Exクラスから介入する余地がないんですよね。
毎度言ってますがなんでこんな適当な作りなんですかね。
具体的なロジックはここら辺になります。
ユーザディレクトリ内にヘッダフッタがあればそれを割り当て、それが無ければデフォルトのテンプレートを割り当てています。
外部から値を渡すことができないので操作もできません。
結局該当のクラスを直接変更するしかありません。
LC_Page_Mypage_Login::process()の、SC_SiteViewをインスタンス化した直後あたりに以下を埋め込みましょう。
全然どうでもいいんですがデフォルトのテンプレートに
<div id="fotter">
とか書いてあります。これはひどい。
EC-CUBEの記事
/data/Smarty/templates/default/header.tpl
/data/Smarty/templates/default/footer.tpl
が使用されます。
また、ユーザで作成したテンプレがあれば、
/html/user_data/packages/default/header.tpl
/html/user_data/packages/default/footer.tpl
が優先して使用されます。
これでは、たとえばログイン画面などの一部のページだけ全然別のヘッダにしたいんだよ、といった場合に対応できません。
一番手っ取り早いのはExクラスで適当にフラグを突っ込んで、header.tplで場合分けでしょう。
/data/class_extends/page_extends/mypage/LC_Page_Mypage_Login_Ex.php
1
2
3
4
|
function process() {
$this->use_tpl_hoge=1;
parent::process();
}
|
1
2
3
4
5
|
<!--{$use_tpl_hoge}-->
違うヘッダ
<!--{else}-->
いつものヘッダ
<!--{/if}-->
|
ですがまあ正直どうなのという作り方ですね。
どうにかしてみましょう。
テンプレートの割り当ては
/data/class/SC_View.phpのSC_View::SC_View()、コンストラクタで行っています。
で、困ったことにLC_Page_Mypage_Login等のクラスはLC_Page_Mypage_Login::process()内でSC_Viewをインスタンス化して表示まで一気に行ってしまっています。
Exクラスから介入する余地がないんですよね。
毎度言ってますがなんでこんな適当な作りなんですかね。
具体的なロジックはここら辺になります。
1
2
3
4
5
6
7
8
9
10
11
12
|
// ヘッダとフッタを割り当て
$header_tpl = USER_PATH . USER_PACKAGE_DIR
. TEMPLATE_NAME . "/" . "header.tpl";
$footer_tpl = USER_PATH . USER_PACKAGE_DIR
. TEMPLATE_NAME . "/" . "footer.tpl";
// ユーザー作成のテンプレートが無ければ, 指定テンプレートを割り当て
if (!$this->_smarty->template_exists($header_tpl)) {
$header_tpl = TEMPLATE_DIR . "header.tpl";
}
if (!$this->_smarty->template_exists($footer_tpl)) {
$footer_tpl = TEMPLATE_DIR . "footer.tpl";
}
|
ユーザディレクトリ内にヘッダフッタがあればそれを割り当て、それが無ければデフォルトのテンプレートを割り当てています。
外部から値を渡すことができないので操作もできません。
結局該当のクラスを直接変更するしかありません。
LC_Page_Mypage_Login::process()の、SC_SiteViewをインスタンス化した直後あたりに以下を埋め込みましょう。
1
2
3
|
//ヘッダフッタのテンプレートを変更する
$objView->assign("header_tpl", TEMPLATE_DIR . "header_hoge.tpl");
$objView->assign("footer_tpl", TEMPLATE_DIR . "footer_hoge.tpl");
|
全然どうでもいいんですがデフォルトのテンプレートに
<div id="fotter">
とか書いてあります。これはひどい。
EC-CUBEの記事
PR
トラックバック
トラックバックURL: