2.4.x系 ヘッダーとフッターにログアウトボタンを設置/ヘッダーとフッターをブロック化する
ログイン・ログアウトはデフォルトだとblocとして用意されているのですが、
一般的な使い方としては、マイページだったり、商品ページだったり、
色んな場所でログイン・ログアウトはできて欲しいところ。
なので、ヘッダーとフッターにあるであろう、
ナビゲーションリンクからも、ログアウトできるようにしちゃいましょう。
今回はログアウトリンクを設置、会員登録リンクと変更できるような感じにします。
2.11.x系についてはこちらもあわせて参照ください。
[EC-CUBE]2.11.1 ヘッダーやページ内などブロック以外の場所にログアウトボタンを設置する
http://d.hatena.ne.jp/AI-615/20110617/1308295484
[EC-CUBE]2.11.0系でブロックやテンプレートから別のテンプレートファイルやphpファイルをincludeで呼び出す
http://d.hatena.ne.jp/AI-615/20110407/1302161660
手順1 site_main.tplからブロック化したphpを呼ぶ準備をする
<!--{include file= $header_tpl}-->
↓ を
<!--{include_php file="`$smarty.const.HTML_PATH`frontparts/bloc/header.php"}-->
へ変更します。
手順2 上で呼び出しているheader.phpをつくる
html/frontparts/bloc
へ、header.phpを新規作成。中には以下のソースをペタり。
<?php /* * HEADER CLASS */ require_once(CLASS_EX_PATH . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Header_Ex.php"); $objPage = new LC_Page_FrontParts_Bloc_Header_Ex(); register_shutdown_function(array($objPage, "destroy")); $objPage->init(); $objPage->process(); ?>
手順3 呼び出しているLC_Page_FrontParts_Bloc_Header_Exをつくる
html/class_extends/page_extends/frontparts/bloc/
へ、LC_Page_FrontParts_Bloc_Header_Exを新規作成。
中には以下のソースをペタリ。
<?php /* * HEADER CLASS */ require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Header.php"); class LC_Page_FrontParts_Bloc_Header_Ex extends LC_Page_FrontParts_Bloc_Header { /** * Page を初期化する. * * @return void */ function init() { parent::init(); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } } ?>
手順4 呼び出しているLC_Page_FrontParts_Bloc_Headerをつくる
html/class/pages/frontparts/bloc/
へ、LC_Page_FrontParts_Bloc_Headerを新規作成。
中には以下のソースをペタリ。
ここでようやくログイン情報を取得する為の記述がでてきました。
<?php /* * HEADER CLASS */ require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php"); class LC_Page_FrontParts_Bloc_Header extends LC_Page_FrontParts_Bloc { /** * Page を初期化する. * * @return void */ function init() { parent::init(); $bloc_file = "header.tpl"; $this->setTplMainpage($bloc_file); $this->tpl_login = false; $this->tpl_disable_logout = false; } /** * Page のプロセス. * * @return void */ function process() { $objCustomer = new SC_Customer(); // クッキー管理クラス $objCookie = new SC_Cookie(COOKIE_EXPIRE); // ログイン判定 if($objCustomer->isLoginSuccess()) { $this->tpl_login = true; $this->tpl_user_point = $objCustomer->getValue('point'); $this->tpl_name1 = $objCustomer->getValue('name01'); $this->tpl_name2 = $objCustomer->getValue('name02'); } else { // クッキー判定 $this->tpl_login_email = $objCookie->getCookie('login_email'); if($this->tpl_login_email != "") { $this->tpl_login_memory = "1"; } // POSTされてきたIDがある場合は優先する。 if($_POST['login_email'] != "") { $this->tpl_login_email = $_POST['login_email']; } } $this->tpl_disable_logout = $this->lfCheckDisableLogout(); $objSubView = new SC_SiteView(); $this->transactionid = $this->getToken(); $objSubView->assignobj($this); $objSubView->display($this->tpl_mainpage); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } function lfCheckDisableLogout() { $masterData = new SC_DB_MasterData_Ex(); $arrDISABLE_LOGOUT = $masterData->getMasterData("mtb_disable_logout"); $nowpage = $_SERVER['PHP_SELF']; foreach($arrDISABLE_LOGOUT as $val) { if($nowpage == $val) { return true; } } return false; } } ?>
手順5 tplファイルを呼び出せるようにする
手順4で$bloc_fileで指定しているtplファイルを作成します。
今回はhtml/data/Smarty/templates/default/bloc/
へheader.tplを作成します。
中身は現在使用されているheader.tplをコピーしたもので構いません。
そこへ、以下のようにログアウトのリンクを記述します。
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnFormModeSubmit('login_form', 'logout', '', ''); return false;">ログアウト</a>
会員登録のリンクと切り替える場合は、こんな感じ
<!--{if $tpl_login}--> <a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnFormModeSubmit('login_form', 'logout', '', ''); return false;">ログアウト</a> <!--{else}--> <a href="<!--{$smarty.const.URL_DIR}-->entry/kiyaku.php">会員登録</a><!--{/if}-->
手順6 管理画面から作成したtplファイルを編集できるようにする
このままだと、管理画面のデザイン管理から
作成したtplを編集することが出来ません。
なので、指してるパスを変えてあげましょう。
LC_Page_Admin_Design_Header.php内、function process()以下
// 登録時はプレビュー用テンプレートをコピーする if ($_POST['mode'] == 'confirm'){ copy($pre_DIR.$division.".tpl", USER_PATH . USER_PACKAGE_DIR . TEMPLATE_NAME . "/" . $division . ".tpl");
↓
// 登録時はプレビュー用テンプレートをコピーする if ($_POST['mode'] == 'confirm'){ if($division == "header"){ copy($pre_DIR.$division.".tpl", USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . BLOC_DIR . $division . ".tpl"); }else{ copy($pre_DIR.$division.".tpl", USER_PATH . USER_PACKAGE_DIR . TEMPLATE_NAME . "/" . $division . ".tpl"); }
もう一カ所直します。
// ユーザーパスにテンプレートが存在しなければ, // 指定テンプレートから読み込む $header_tpl = USER_PATH . USER_PACKAGE_DIR . TEMPLATE_NAME . "/" . "header.tpl";
↓
// ユーザーパスにテンプレートが存在しなければ, // 指定テンプレートから読み込む $header_tpl = USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . BLOC_DIR . "header.tpl";
これでHeaderのブロック化ができました!
Footerもおんなじように作ってあげるとうごくよ!