[OpenPNE3]ログイン状態に応じてフッターを書きかえる
OpenPNE2では、HTML挿入機能としてログイン前フッターとログイン後フッターを書きかえる機能がありました。OpenPNE2で存在していた機能は原則としてOpenPNE3でも実装される予定ですが、いつになるかはわかりません。今回は手ごろなフッター書き換えを学んで、OpenPNEテンプレートカスタマイズの感覚を掴みたいと思います(OpenPNE 3.0.0対応)。
現状、OpenPNE3のフッターは、ログイン前もログイン後も下図のような「Powered by OpenPNE」という文字列です。

この文字列は、内部のテンプレートで直書きになっているので、管理画面などから書き換えることはできません。ここを直接書き換えて、ログイン前とログイン後のフッターを変化させたいと思います。
#1 _footer.phpテンプレートの編集
フッターのテンプレートは、/apps/pc_frontend/templates/_footer.phpにあります。このファイルはOpenPNE3.0.0では以下のようになっています。
-
<p>Powered by <a href="http://www.openpne.jp/" target="_blank">OpenPNE</a></p>
これを、以下のように書き換えます。
-
<?php if (($member = $sf_user->getMember()) && $member->getIsActive()): ?>
-
<p>Powered by <a href="http://www.openpne.jp/" target="_blank">OpenPNE</a>(ログイン後)</p>
-
<?php else: ?>
-
<p>Powered by <a href="http://www.openpne.jp/" target="_blank">OpenPNE</a>(ログイン前)</p>
-
<?php endif; ?>
- $sf_user->isAuthenticated()の返り値のtrue/falseで判断すると、ほとんどの場合は困りませんが、仮登録者の本登録フォームなどで不具合が発生します。仮登録ユーザも「仮登録者として登録済み」と判断され、認証が通ってしまうのが原因です。これはOpenPNE3で認証識別子credentialsとしてSNSMemberだけでなく、SNSRegisterBeginやSNSRegisterFinishなどを用意していることから分かります。
- 本登録済みのメンバーかどうかを判断するには、$sf_user->getMember()でMemberクラスのインスタンスの取得を試みて、取得できた場合、getIsActive()メソッドのtrue/falseでアクティベート(本登録)済みかどうかを判断します。
#2 結果の確認
ログイン画面、仮登録者の本登録画面、ログイン済みメンバーのホーム画面の3つ見てみると、ログイン済みの画面だけフッターが書き変わっているのがわかると思います。
#3 お好みでCSSも
/web/css/main.cssにフッターのCSSを定義した部分があります。例えば「#Footer p」のtext-alignをcenterにするとかできます。
今回の記事に関して、あってるとか、まちがってるとか、もっといい方法があるとかがあれば、コメントなどでアドバイスください。



