データベースからのデータの取得と表示ができるようになったので
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-2010 BBB All rights reserved.