データベースからのデータの取得と表示ができるようになったので
Smartyを使って表示をしてみたいと思います。
ApacheのDocumentRootの外にtemplates,templates_c,cache,cnofigsディレクトリを
作成します。
(DocumentRootの外に作るのはセキュリティ上有効だそうです。)
(Windowsでのイメージ[使い回しです])
templates_cとcacheはApacheで使用するユーザーが書き込める必要があるのでオーナーを変更します。
(ユーザーやグループを確認するには、Apacheのhttpd.confを確認します。)
$ chown nobody:nogroup templates_c
$ chown nobody:nogroup cache
準備ができたのでテンプレートを作ってみたいと思います。
テンプレートは、index.tplとします。
<html>
<head>
<title>Sample2</title>
</head>
<body>
<table border=1>
{foreach item=user_info from=$users}
<tr>
<td>{$user_info.user|escape}</td>
<td>{$user_info.host|escape}</td>
</tr>
{/foreach}
</table>
</body>
</html>
Smartyと関係のある部分は、7行目からの6行です。
元となるphpからusersという配列を受け取りテーブルとして表示します。
受け取る配列は、
Array[0]->Array([user]="root",
[host]=%)
Array[1]->Array([user]="root",
[host]=localhost)
のような構造です。
phpの方は以下のようになります。
fetch後のデータの作り方は、これでいいのかわかりませんが
とりあえず動いています。
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->template_dir = 'テンプレートのパス';
$smarty->compile_dir = 'コンパイルのパス';
$smarty->config_dir = 'コンフィグのパス';
$smarty->cache_dir = 'キャッシュのパス';
$cn = mysql_connect("localhost","root","パスワード");
if(!$cn){
die("connect Error");
}
if(!(mysql_select_db("mysql"))){
die("select error");
}
$sql = "SELECT USER,HOST FROM user";
$dyn = mysql_query($sql);
if(!$dyn){
die("query error");
}
$i = 0;
while($row = mysql_fetch_array($dyn)){
$users[$i]['user'] = $row['USER'];
$users[$i]['host'] = $row['HOST'];
$i++;
}
$smarty->assign('users',$users);
$smarty->display('index.tpl');
mysql_close($cn);
?>
phpのプログラムは、htmlの部分が無くなっています。
2行目以降の6行は、Smartyを使うための準備です。
requireは、phpのスクリプトを読み込んでいます。
次のnewでSmartyをインスタンス化しています。
それ以降は、Smartyの環境設定です。
mysql_fetch_arrayのループ内は、テンプレートに渡す配列を準備しています。
$smarty->assign('users',$users)は、テンプレート上で使われる変数名と
テンプレートに渡す値を指定します。
$smarty->display('index.tpl')でテンプレートを表示します。
・phpで他のスクリプトを読み込むときrequireを使う。
・他にもincludeで読み込むこともできる。
この2つの違いは、実行中に問題が発生した場合
includeは、Warningを出して処理を継続しますが、requireは、処理を中止します。
Copyright 1997-2008 BBB All rights reserved.