何回かに分けて、SmartyでPEAR::Auth を使うためのサンプルを説明しています。
今回は今まで作った Smarty や 認証用のクラスを使ったページを作ります。
index.php
<?php require_once("define.inc"); require_once("MySmarty.php"); require_once("MyAuth.php"); $smarty = new MySmarty(); $authobj = new MyAuth(); $authobj->start(); if (!$_POST[LOGOUT_BUTTON_NAME] && $authobj->getAuth()){ /* この中は認証が必要 */ /* テンプレート内で使用する変数を入れる */ $smarty->assign('name',$authobj->getUsername()); $smarty->assign('auth',$authobj); /* テンプレートを呼び出す */ $smarty->display('index.tpl'); } $authobj->end(); ?>
5行目の $smarty は好きな名前にしてもいいですが、MyAuth.php で global として使用している個所も同じ変数名にしてください。
ログインしていなければ、8行目の start() メソッドの中で (MyAuth.php の )loginFunction が呼ばれ、ログイン画面が表示されます。
ログインしている時は、10~17行目を通ります。ここに、ユーザにだけ見せたいページを記述すればよいわけです。
今回は、Smarty のテンプレート(index.tpl)に渡すために、2つ(ただの文字列変数とクラスオブジェクト変数)を渡してみます。
index.tpl
<!DOCTYPE html> <html dir="ltr" lang="ja"> <head> <meta charset="UTF-8" /> {* defineで定義された定数を使う *} <title>{$smarty.const.APPLICATION_TITLE_NAME}</title> </head> <body> {* $smarty->assign() で渡された変数を使う *} <p> {$name} さん?</p> {* $smarty->assign() で渡された変数のメンバ関数を使う *} <p> {$auth->getUsername()} さんですよね!?</p> {* Smary 予約変数を使う *} <p> 今日は{$smarty.now|date_format:'%Y年%m月%d日'}です。</p> <form method="post" action="{$smarty.server.PHP_SELF}"> <input type="submit" name="{$smarty.const.LOGOUT_BUTTON_NAME}" value="ログアウト"> </form> </body> </html>
最後に、ログインしたユーザにだけ見せたいページのレイアウトです
index.php から渡された変数は、13行目や16行目のように使います。
21~23行目はログアウトボタンです。