201.一覧ページの記述方法(Smarty版)
Smartyを使った
メンバー一覧は
sources/member_list_smarty.phpとなります。
さっと全体を見るとわかると思いますが。
HTMLブロックがありません。HTMLは
Smartyのテンプレートディレクトリに記述します。
Smartyのインクルード
まず、上のほうに
require_once("inc_smarty.php");
という記載があります。ここで
inc_smarty.phpを呼び出してしているわけですがその内容は
<?php
//Smartyの読み込み
require_once('../Smarty/libs/Smarty.class.php');
//Smartyを構築
$smarty = new Smarty();
//Smartyの各ディレクトリを設定
$smarty->template_dir = '../Smarty/templates/';
$smarty->compile_dir = '../Smarty/templates_c/';
$smarty->config_dir = '../Smarty/config/';
$smarty->cache_dir = '../Smarty/cache/';
?>
となっています。ここでは
sourcesディレクトリからの相対パスで
//Smartyの読み込み
require_once('../Smarty/libs/Smarty.class.php');
//Smartyを構築
$smarty = new Smarty();
を行ってます。これで
Smartyクラスのインスタンスが構築されます。変数名は
$smartyです。これはグローバル変数ですので。関数内で使用する場合は
global宣言が必要になります。
そのあとはSnartyにテンプレート位置や、キャッシュの位置を設定します。
ですから
sources/member_list_smarty.php側ではこのファイルを呼び出せば
Smartyの準備は完了となります。
Smartyへのアサイン
Smartyは
アサインという概念があります。PHPで定義した
変数を
Smartyに伝える仕組みです。
例えば、158秒目付近に
一覧のアサインがあります。
function assign_member_list(){
//$smartyをグローバル宣言(必須)
global $smarty;
global $rows;
$smarty->assign('rows',$rows);
}
ここでは、Smartyに
$rows配列を
rowsという名前でアサインします。こうすることで、
Smartyのテンプレートでこの変数を使えるようになります。
Smartyのdisplay
必要な変数を
アサインしたら、最後に
//Smartyを使用した表示(テンプレートファイルの指定)
$smarty->display('member_list_smarty.tmpl');
と記述して、Smartyに出力を指示します。この際
テンプレートファイル名を指定します。
Smartyのテンプレート
テンプレートは前に指定したように
Smarty/templatesディレクトリにあります。この中の
member_list_smarty.tmplが一覧ページ用のテンプレートになります。以下抜粋です。
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="css/main.css" rel="stylesheet" type="text/css">
<title>メンバー一覧</title>
{literal}
<script type="text/javascript">
<!--
function set_func_form(fn,pm){
document.form1.target = "_self";
document.form1.func.value = fn;
document.form1.param.value = pm;
document.form1.submit();
}
function del_func_form(pm,mess){
var message = "本当に\r\n";
message += mess;
message += "\r\nを削除しますか?";
if(confirm(message)){
document.form1.target = "_self";
document.form1.func.value = 'del';
document.form1.param.value = pm;
document.form1.submit();
}
}
// -->
</script>
{/literal}
</head>
<body>
//中略
<table>
<tr>
<th>メンバーID</th>
<th>メンバー名</th>
<th>操作</th>
</tr>
{foreach from=$rows key=k item=value}
<tr>
<td width="20%" class="center">
{$value.member_id}
</td>
<td width="65%" class="center">
<a href="member_detail_smarty.php?mid={$value.member_id}">{$value.member_name}</a>
</td>
<td width="15%" class="center">
<input type="button" value="削除確認"
onClick="javascript:del_func_form({$value.member_id},'【{$value.member_name}】')" /></td>
</tr>
{foreachelse}
<tr>
<tr><td colspan="3" class="nobottom">メンバーが見つかりません</td></tr>
</tr>
{/foreach}
</table>
//中略
まず、注意したいのは
javascriptブロックです。Smartyと記号がかぶってしまうので
{literal}で囲みます。
また
foreachで始まるブロックが
メンバー一覧表示しているところです。このドキュメントは
Smartyの文法を説明するものではないので詳細は述べませんが、テンプレートエンジンは中に
ループを記述することができます。つまり
PHP側では、配列であれ単純な変数であれ、テンプレートエンジンに
変数のみ渡せば、テンプレート内でループ処理が書けるので、非常に便利になります。また、デザインをそのままかけるので、デザインの修正にも柔軟に対応できます。
このように
テンプレートエンジンを使うと、ソースとデザインの分離が図れるだけではなく、デザインも柔軟に反映できます。
Smartyに限らず、
PHPOBaseを使う場合、ぜひ
テンプレートエンジンを併用するといいと思います。