concrete5 でログイン、ログアウトのリンクをサイトに設置したい方への TIPS です。concrete5 日本語公式サイトの、左上の「ログイン | 新規登録」リンクのコードをそのまんまコピペしています (爆)
テーマにログインURLを埋め込みたい方向けです。もっと簡単にログインができるようにしたい方はログインブロックをお勧めします。
※ このコードは 5.6.3.1 で動作確認をしています。
サンプルコード
<?php $c = Page::getCurrentPage(); $u = new User(); if ($u->isRegistered()) { ?> <?php echo $u->getUserName()?>としてログイン中。<a href="<?php echo $this->url('/login', 'logout')?>">ログアウト</a> | <a href="<?php echo $this->url('/profile');?>">プロフィール</a> <?php } else { ?> <a href="<?php echo $this->url('/login', 'forward') . $c->getCollectionID() . '/';?>">ログイン</a> | <a href="<?php echo $this->url('register');?>">新規登録</a> <?php } ?>
コードを使っているサイトの仕様
- サイトへのユーザー新規登録有り
- 公開プロフィールを管理画面よりONに設定
上記の設定がされていない場合は、適宜、使うコード、使わないコードを調整してください。
プリティーURL を実装している方でも、上記のコードでは、index.php がリンクに入ってしまいます。ログインページなどはシステムページなので、念の為に index.php をリンクに含ませています。それが嫌な方は、
/config/site.php に
define('URL_REWRITING_ALL', true);
を加えてください。
説明
$c = Page::getCurrentPage() で現在のページ位置情報を取得
$u = new User() でユーザー関連の関数を $u に取り込む宣言
※ 上記2行は、同じファイルのコード位置以前の場所で既に宣言されていれば省略可能です。
if ($u->isRegistered()) { は、ユーザーが、ログインしているかしていないかの分岐
$u->getUserName() でユーザー名を取得。
$this->url(‘/login’, ‘logout’) でログアウトURL取得
$this->url(‘/profile’) でプロフィールページURL取得
$this->url(‘/login’) でログインURLを取得
※ パラメーターで「login/forward/コレクションID (ページID)」を入れると、ログイン後にそのページに戻ってきてくれるので、その指定を行う。
$c->getCollectionID() で、現在ユーザーが訪問しているページの ID を表示。
$this->url(‘register’)で新規ユーザー登録URL取得
忘備録(特記事項)
忘備録のために、$c は、5.6.x 系までは、テーマの中でグローバル関数として登録されているのですが、もしかしたら 5.7.x 以降で変更されるので、方法がちょっと変わるかも。