最初から用意されているブロック要素としてログインブロックがあります。
ログアウト状態であればログインボックスを表示し、ログイン状態であれば氏名とログアウトボタンを表示してくれる優れものです。
さて、このログインボックス内では氏名を
<!--{$tpl_name1|escape}--> <!--{$tpl_name2|escape}-->
という形で取得しています。
なるほど、これを使えば氏名を取得できるんだな、と新しく作ったブロックに<!--{$tpl_name1|escape}--> <!--{$tpl_name2|escape}-->と書いても全然氏名を表示してくれません。
なんでだよ。
実は最初から用意されているブロックは、内部的にそれぞれのブロック単位で独自のPHPを実行しています。
dtb_blocテーブルにそこらへんが書かれていますが、例えばログインブロックは/html/frontparts/bloc/login.phpを呼び出して$tpl_name1や$transactionidといった値を取得しています。
ログインブロックの氏名を取得する部分だけ他のブロックから利用できないかと思えば、cookieを取得して氏名を取得してテンプレを表示するまで全部をひとつのメソッドで実行したりしているので流用できません。
せっかくdtb_bloc.tpl_pathにテンプレート名が書いてあるのに何気にそれも使っていません。なにそれ。
複数のブロックでログイン状態の表示を行いたい場合、それぞれのブロックで毎回ログイン状態を取得しないといけません。
もしかしたらどこかにコンポーネントやビヘイビア的なものがあるのかもしれませんがよくわかりませんでした。
ヘルパーはあるのですがいまいち使い方がわかりません。
というわけで特殊な情報が欲しい場合は以下のように面倒なことを行う必要があります。
とりあえず最初からあるログインブロックと同じようなものを作成してみましょう。
まず管理画面から適当にブロックを作成。
名前はなんでもいいですが、とりあえずuser_nameにしました。
中身を
姓:<!--{$tpl_name1|escape}--><br />
名:<!--{$tpl_name2|escape}--><br />
とします。
サイトトップなり適当なページなりかっらブロックを呼び出すように設定します。
初期状態では単にそのブロックが表示されるだけで、ロジックの記述は何処にもできません。
dtb_blocテーブルに今作成したブロックが記録されます。
php_pathカラムに、ブロックを呼び出したときに実行されるPHPのパスを記入。
今回は周りと揃えて
frontparts/bloc/user_name.php
としました。
/htdocs/members/frontparts/bloc/user_name.phpを作成。
中身はlogin.php等をコピペしてクラス名だけ変更します。
1
2
3
4
5
6
7
|
require_once(CLASS_EX_PATH .
"page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_UserName_Ex.php");
$objPage = new LC_Page_FrontParts_BLoc_UserName_Ex();
register_shutdown_function(array($objPage, "destroy"));
$objPage->init();
$objPage->process();
|
てか、なんでこれDocumentRoot内にあるんですかね?
ブログパーツ的にAJAXで使えるわけでもないですし意味わからん。
/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_UserName_Ex.phpを作成。
こちらもLC_Page_FrontParts_Bloc_Login_Ex.phpをコピペするだけです。
1
2
3
4
5
6
7
8
9
|
require_once(CLASS_PATH .
"pages/frontparts/bloc/LC_Page_FrontParts_Bloc_UserName.php");
class LC_Page_FrontParts_Bloc_UserName_Ex
extends LC_Page_FrontParts_Bloc_UserName {
function init() { parent::init(); }
function process() { parent::process(); }
function destroy() { parent::destroy(); }
}
|
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_UserName.phpを作成。
こちらはロジックを書く必要があります。
とりあえずはLC_Page_FrontParts_Bloc_Login.phpをコピペしてクラス名、テンプレート名を変えるだけで動作確認はできます。
以上の設定を行い、ログインしてみると、作成したブロックに氏名が表示されるようになります。
めでたし。
めんどくさいですね。
どうにかならんものじゃろうか。
たとえばカレンダーブロックに氏名を表示させたくなっただけでも、
LC_Page_FrontParts_Bloc_Calendar_Ex.phpにLC_Page_FrontParts_Bloc_Login_Exのコードをまるまるコピペさせられる羽目になります。
設計がおかしすぎる。
EC-CUBEの記事