#1 インストール
1 download
以下のサイトよりダウンロードします。
http://www.smarty.net/
2 インストール
ダウンロードしたzipを解凍します。使うのはlibsフォルダのみです。
DocumentRootにsampleフォルダを作成しサンプルアプリを置くものとして
htdocs + sample
└ libs <- ダウンロードしたsmartyのlibs
※libsを複数プロジェクト共通で利用する場合は、
c:\smarty3\libs 等適当な場所へ配置しましょう。
3 設定
smartyのlibsを共通で使う場合は、php.iniのinclude_pathの設定を行います。
";"を削除し、";c:\smarty3\libs"等と追記します。
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
↓
include_path = ".:/php/includes:/usr/local/lib/smarty3/libs"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
↓
include_path = ".;c:\php\includes;c:\smarty3\libs"
その他フォルダを作成します。
htdocs + sample
├ libs ← ダウンロードしたsmartyのlibs
├ templates ← 空のフォルダを作成
├ templates_c ← 空のフォルダを作成
├ cache ← 空のフォルダを作成
└ configs ← 空のフォルダを作成
#2 sampleアプリケーション作成
sampleフォルダにテンプレートとプログラムを作成します。
<html>
<head>
<title>Smarty Test</title>
</head>
<body>
<h1>{$msg}</h2>
</body>
</html>
<?php
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = dirname(__FILE__).'/templates';
$smarty->compile_dir = dirname(__FILE__).'/templates_c';
$smarty->config_dir = dirname(__FILE__).'/configs';
$smarty->cache_dir = dirname(__FILE__).'/cache';
$smarty->assign('msg','Hello World!');
$smarty->display('sample.tpl');
?>
#3 設定ファイルを使う(Smarty3)
プログラムから設定ファイルを読み込んでみます。
まずは、configs/sample.confを作り定義します。
# global
url = "www.hoge.com"
title = "Smarty"
[mysql]
DSN = "mysql:dbname=sample_db; host=localhost; charset=utf8"
USER = "user1"
PASS = "user1pass"
そして、呼出側しは
:
//設定ファイル読込み
$smarty->configLoad('sample.conf');
//取得
$url = $smarty->getConfigVars('url');
//テスト表示
echo "url = ".$url."<br />";
//設定ファイル読込み(セクション)
$smarty->configLoad('sample.conf', 'mysql');
//取得
$dsn = $smarty->getConfigVars('DSN');
//テスト表示
echo "dsn = ".$dsn."<br />";
:
$smarty->display('sample.tpl');
#4 DBからの一覧表示(PDO)
DBのm_syainテーブルを全件取得し一覧表示してましょう。
まずは、DBまわり用のクラス
<?php
class DbAccess {
private $pdo;
/**
* コンストラクタ
* @param $smarty smartyオブジェクト
*/
public function __construct($smarty){
try {
//configs/sample.confより設定取得
$smarty->configLoad('sample.conf', 'mysql');
$dsn = $smarty->getConfigVars('DSN');
$user = $smarty->getConfigVars('USER');
$pass = $smarty->getConfigVars('PASS');
//PDOインスタンス生成
$this->pdo = new PDO($dsn, $user, $pass);
//接続語にオプション指定
//(エラー発生時に例外をスローする指定)
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $Exception) {
self::abort('エラー:' . $Exception->getMessage());
}
}
/**
* クローズ処理
*/
public function close(){
try {
$this->pdo = null;
}
catch(PDOException $Exception) {
//エラーは無視
}
}
/**
* テーブルデータ取得
*
* @return テーブルデータ一覧
*/
public function get_list(){
try {
//m_syainテーブルより全件取得
$sql = "select * from m_syain where del_flg <> :delflg";
$stt = $this->pdo->prepare($sql);
$stt->execute(array(':delflg'=>'1'));
//$sql = "select * from m_syain where del_flg <> ?";
//$stt = $this->pdo->prepare($sql);
//$stt->execute(array('1'));
if ($list = $stt->fetchAll(PDO::FETCH_ASSOC) ){
return $list;
}
}
catch(PDOException $Exception) {
self::abort('エラー:' . $Exception->getMessage());
}
}
/**
* フィールド名一覧取得
*
* @return フィールド名一覧
*/
public function get_keys(){
try {
$sql = 'show columns from m_syain';
$stt = $this->pdo->prepare($sql);
$stt->execute();
while ($column = $stt->fetch(PDO::FETCH_ASSOC) ){
$keys[] = $column['Field'];
}
}
catch(PDOException $Exception) {
self::abort('エラー:' . $Exception->getMessage());
}
finally {
return $keys;
}
}
/**
* die()文字化け対策
*/
private function abort($status=0) {
if (is_string($status) && !headers_sent()) {
//ヘッダにcharset追加
header('Content-Type: text/plain; charset=UTF-8');
}
die($status);
}
}
呼出し側は
<?php
:
require_once ("CDbAccess.php");
:
$smarty = new Smarty();
:
$testdb = new DbAccess($smarty);
$keys = $testdb->get_keys();
$list = $testdb->get_list();
$values = [
'title' => 'test',
'head' => 'テスト',
'keys' => $keys,
'list' => $list
];
$smarty->assign ('values', $values);
//データベース接続終了
$testdb->close();
:
$smarty->display('sample.tpl');
?>
あとテンプレートは
:
<h4>{$values.head}</h4>
<table border=1 >
{foreach $values.keys as $key}<th>{$key}</th>{/foreach}
{foreach $values.list as $row}
<tr>{foreach $row as $val}<td>{$val}</td>{/foreach}</tr>
{/foreach}
</table>
:
#5 エラー情報出力
とりあえずphpファイルの先頭に以下の2行を入れる。
<?php
ini_set('display_errors',1); //1:エラー表示、0:非表示
error_reporting(E_ALL); //エラー表示レベル(E_ALL & ~E_NOTICE等々指定)
:
#6 デバッグ
<?php
:
//デバッグコンソールを出す
$smarty->debugging = true;
:
//var_dumpで出力
var_dump($変数);
: