一部のページだけ完全に別のCSSを適用し、デザインの出し分けをしたいと思ってもデフォルトではできません。
<head>タグ及びCSSなどを呼び出しているテンプレートファイルは/eccube/Smarty/templates/default/site_frame.tplですが、これはEC-CUBE上のどのページを開こうが常時絶対に読み込まれます。
適当にファイルを拾ってみると、
$objView->display(SITE_FRAME);
などと書かれていますが、初期値はSITE_FRAME='site_frame.tpl'です。
管理画面→パラメータ設定からSITE_FRAMEの値を変えることによってファイル名を変更することはできますが、結局全てのページで呼び出されるテンプレートファイルが変わるだけです。
SITE_FRAMEの定義を場合によって変えようと思った場合、定義を行っているのは/data/cache/mtb_constants.phpなのですが、これはパラメータ設定を行うと上書きされてしまいます。
$objView->display('site_frame_hoge.tpl');と変更すればファイル単位で出し分けが可能ですが、管理画面→レイアウト設定から作成したページだった場合、管理画面上から編集すると、せっかくの変更が無かったことにされてしまいます。
どれもこれもうまいこといきません。
仕方ないので$objView->display()の呼び出し先を変更しましょう。
実体は/data/class/SC_View.phpのSC_View::display()です。
1
2
3
4
5
6
7
8
9
10
|
// テンプレートの処理結果を表示
function display($template, $no_error = false) {
//URLに'hoge'が入っていたらテンプレートファイルを変更
if(strpos($_SERVER['PHP_SELF'],'hoge')!==false){
$template='site_frame_hoge.tpl';
}
//以下略
}
|
引っかけ方は色々あるでしょうが、これで一部のURLだけ全体のレイアウトを変更することができるようになりました。
全然関係ないのですが、元々EC-CUBEにはキャンペーンページなら画面レイアウトを変更するという機能が含まれているようです。
例えばカートを見てみると、LC_Page_Cart::process()には、$objView->display(SITE_FRAME);のかわりに
$objCampaignSess->pageView($objView);
と書かれています。
SC_CampaignSession::pageView()を見てみたところ、
1
2
3
4
5
6
7
8
9
10
11
12
|
/* キャンペーンページならフレームを変更 */
function pageView($objView, $site_frame = SITE_FRAME) {
$self_path = explode("/",$_SERVER['PHP_SELF']);
$campaign_dir = explode("/",CAMPAIGN_DIR);
$is_campaign = array_search( $campaign_dir[0] , $self_path );
if( strlen($is_campaign) > 0 ) {
$objView->display($site_frame);
} else {
$objView->display($site_frame);
}
}
|
変更できてないやん。
実装できてないならせめてコメントアウトしておけと。
PR
トラックバック
トラックバックURL: