Smartyの利用
私の場合ですが、Web系の開発はJavaがほとんどでしたので、MVCモデルという設計、実装をJavaで使ってきましたが、PHPではどう実現するのかな?というところから始まり、まずはSmartyを調べてみました。
・インストール方法
ここからダウンロードしてください。現時点では、"Smarty-2.6.10 Source"となっています。これをダウンロードして、解凍します。実際に使用するのは、この中のlibディレクトリです。
詳細は、以下を参考にしてください。
和訳ドキュメント(Ver2.6.6です)
本家ドキュメント
・Smartyの利用方法
表示部分(デザイン部分)とロジックの分離ということで、この表示部分は、テンプレートという形式で表現します。たとえば一部分ですが、こういった感じでしょうか。
{foreach from=$data item="item"}
<tr>
<td>{$item.id}</td>
<td>{$item.name}</td>
<td>{$item.prefectures}</td>
<td>{$item.email}</td>
</tr>
{/foreach}
ロジック部分で、必要な処理をしてこの表示部分に処理結果のデータを割り当てます。ここで、Smartyは以下のようにSmarty.class.phpを読み込んで、Smartyクラスのインスタンスを生成して利用します。
require_once('Smarty/Smarty.class.php');
$smarty = new Smarty;
ロジック部分の部分的な例です。MySQLからデータを取得して、テンプレートを表示しています。id、name、prefectures、emailの各項目にデータを設定しています。
//各レコードの読み込み
while($array = mysql_fetch_row($result)){
$data[] = array('id'=>$array[0],
'name'=>$array[1],
'prefectures'=>$array[2],
'email'=>$array[3]);
}
mysql_close($con);
// 取得したデータをセットして、テンプレートを表示
$o_smarty->assign("data",$data);
$o_smarty->display("smarty.tpl");
これで、表示部分とロジック部分が、確かに分かれています。このロジック部分にデータを渡す入力部分を加えた実行例がここから実行できます。
・ソース全体の例
------------------------------------------
入力部分(input.php)
------------------------------------------
<h2>会員一覧表示(Smarty テストプログラム)</h2>
<hr>
表示する会員IDの範囲を指定してください。<br>
<form method="post" action="smarty.php">
開始ID:<input type="text" name="from" size="3"/>から<br>
終了ID:<input type="text" name="to" size="3"/>までを表示します。<br>
<input type="submit" name="btn" value="検索実行"/>
</form>
------------------------------------------
ロジック部分のソース例(smarty.php)
------------------------------------------
<?php
require_once("Smarty/Smarty.class.php");
// smartyオブジェクトの生成
$o_smarty=new Smarty();
// ディレクトリのパスの設定
$o_smarty->gttemplate_dir="Smarty/templates";
$o_smarty->compile_dir="Smarty/templates_c";
// MySQLからのデータ取得
$con = mysql_connect("myserver", "myuser", "mypassword")
mysql_select_db("mydb")
$query = "select * from tTestCustomer where id between ".$_REQUEST["from"]." and ".$_REQUEST["to"];
$result = mysql_query($query)
while($array = mysql_fetch_row($result)){
$data[] = array('id'=>$array[0],
'name'=>$array[1],
'prefectures'=>$array[2],
'email'=>$array[3]);
}
mysql_close($con);
// 取得したデータをセットして、テンプレートを表示
$o_smarty->assign("data",$data);
$o_smarty->display("smarty.tpl");
?;>
------------------------------------------
表示結果のテンプレートの例(smarty.tpl)
------------------------------------------
<html>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JIS";>
<h2>会員一覧表示(Smarty テストプログラム)</h2>
<hr>
検索結果<br>
<table border="1">
<tr>
<th>ID</th>
<th>NAME</th>
<th>PREFECTURES</th>
<th>MAIL</th>
</tr>
{foreach from=$data item="item"}
<tr>
<td>{$item.id}</td>
<td>{$item.name}</td>
<td>{$item.prefectures}</td>
<td>{$item.email}</td>
</tr>
{/foreach}
</table>
------------------------------------------
・MVCモデルへ
これで、デザインとロジックが分離できますが、さらに簡単な自作のコントローラ的なものを作成して、Model部分もはっきりと分離した設計にすれば、それなりにMVCモデルになるでしょうか。小規模システムならそれで対応できると思います。あと、もっと大規模なシステムでは、もちろんフレームワークを利用する方法もあります。まだ私はよく知らないのですが、Smartyを利用したguessworkというフレームワークがあるようです。
・参考にさせていただたサイト(ありがとうございます。)
たぬきと一緒にお勉強 第4回目 Smartyを使ってみよう
guesswork 薄っぺらなフレームワーク
Posted by nishida at 18:56:18


