rui live note

WordPress、PHP、子育て、ブログ、将棋、コワーキング、子育て、群馬等に関する日々感じたことを書いているブログです

*

EC-CUBEで全ページからログインチェックができるようにしてみる

      EC-CUBE

  • このエントリーをはてなブックマークに追加
  • Pocket

ログイン

最近とある用事で、初めて EC-CUBE をガリガリとカスタマイズしています。

始めに構造を理解するまではどうしても時間がかかりますが、ある程度理解してしまえば何とかなりそうな感触はつかめてきました。それなりに規模が大きいシステムなので、ソース解析には Vim + GLOBAL さまさまという感じですね。

せっかくの機会なので、よく使えそうな小ネタでもあればこちらに残していこうと思っています。

さて、ログインしている時としていない時でページの表示を切り替えたいっていう要望はどこでもありますよね。今回はそんな時に使える、ログイン状態のチェックをどのページでもできるようにする方法です。

なお、EC-CUBEは Ver 2.13.2の環境です。

カスタマイズ方法

EC-CUBE には、ログインの判定結果を tpl_login という変数にセットしているいくつかのページがデフォルトで存在します。

例えば、下記のようにソースを grep すると、tpl_login に値をセットしている箇所が見つかります。

$ grep -rn "\$this\->tpl_login =" *
data/class/pages/products/LC_Page_Products_Detail.php:240:            $this->tpl_login = true;
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Login.php:43:        $this->tpl_login = false;
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Login.php:72:            $this->tpl_login = true;
data/class/pages/shopping/LC_Page_Shopping_Payment.php:95:            $this->tpl_login = '1';
data/class/pages/shopping/LC_Page_Shopping_Confirm.php:129:            $this->tpl_login = '1';
data/class/pages/cart/LC_Page_Cart.php:200:            $this->tpl_login = true;

上記は、名前からも察しがつくように、商品詳細ページ、ログインブロック、カートページ、・・・といった特定のページを表示する時に使われるクラスなのですが、これらのページでは変数 tpl_login にセットされたログインしているか(true)否か(false)の結果によって、次のようにテンプレート内の表示を切り分けることができます。

<!--{if $tpl_login}-->
ログイン中です。
<!--{else}-->
ログインしていません。
<!--{/if}-->

さて、これを特定のページに限らずどのページからも使えるようにしてみましょう。

ページ表示する際に必ず呼び出される LC_Page という基底クラス LC_Page(data/class/pages/LC_Page.php)があります。その拡張クラスである LC_Page_Ex(data/class_extends/page_extends/LC_Page_Ex.php)に、次のようなコードを追加します。

public function init()
{   
    parent::init();

    // ログイン判定
    $objCustomer = new SC_Customer_Ex();
    if ($objCustomer->isLoginSuccess() === true) {
        $this->tpl_login = true;
    }   
}  

これで、どのページからも tpl_login にログイン判定結果がセットされるようになりました。

同様に LC_Page_Ex に処理を追加することで、全ページ共通で参照したい情報をセットしておくことが可能です。知っておくと役に立つ場面がありそうですね。

photo credit: Sean MacEntee via photopin cc

ad

この記事が気に入ったらシェアしてもらえると嬉しいです!

  • このエントリーをはてなブックマークに追加
  • Pocket
  • follow us in feedly
  • RSS

  関連記事

電王戦FINAL
電王戦FINAL第1局は斎藤慎太郎五段がAperyに完勝!ニコファーレの大盤解説会に行ってきました。

2015年3月14日、電王戦FINALの第1局・斎藤慎太郎五段 vs Apery …

コロツアー
コロコロコミックのお祭り「コロツアー2014」群馬大会に行ってきました

8月17日にイオンモール太田で開かれた、コロツアー2014群馬大会に行ってきまし …

妖怪ウォッチ
今度はマクドナルドで妖怪ウォッチの2015年カレンダーが発売!11月6日までの予約特典も。

妖怪ウォッチカレンダー2015 | McDonald's マクドナルド …

キーボード
WordPressでEnterキー押下時のsubmitはうまくできている

タイトルのままですが、WordPressを使っていてEnterキー押下時のsub …

将棋
将棋ウォーズの対局履歴をスクレイピングしてURL保存するツールを作りました

将棋ウォーズの対局履歴ページは、悔しい負け方をした対局の一人感想戦をしたり、棋譜 …

副鼻腔炎
やっぱりだるかった。。約2年半ぶりの副鼻腔炎を発症。

先日の金曜日、朝から何だか体がだるいような感覚で一日我慢しながら仕事をこなしたも …

チームラボアイランド 学ぶ!未来の遊園地
スズラン高崎店の「チームラボアイランド 学ぶ!未来の遊園地」に行ってきました

高崎のスズラン百貨店で夏休みイベントとして開催されている「チームラボアイランド …

テスト
「SonicGarden Study #05」を見てテストについて感じたこと

先日、Ustreamで配信されたソニックガーデンさん主催のオンライン勉強会「So …

IPアドレス
IPエイリアスで一つのNICに複数IPアドレスを割り当てる設定手順(CentOS)

IPエイリアス機能を使って、一つのネットワークインターフェースに複数のIPアドレ …

オンライン学習部
9月18日にオンライン学習部という勉強会を開きます

9月18日(水)にオンライン学習部 #0 という勉強会を開きます。 オンライン学 …