Smartyのセットアップ
今回はSmartyのセットアップをしてみたいと思います。
SmartyはPHPで使うテンプレートエンジンで、デザインとロジックを分けることの出来る優れものです。
今作ろうとしているサイトはSmartyとbootstrapを使って構築する予定。
今回の環境
- OS:Windows 10 Pro
- Web:Apache 2.4.41
- PHP:7.3.9
Smartyのダウンロード
まず初めに何はともあれダウンロードです。


ここから最新の3.1.33をダウンロードします。
実際のダウンロード画面はこちら↓

Zipかtar.gzかお好みの形式でダウンロードしましょう。
Smartyのセットアップ
セットアップといっても好みの場所で解凍すればOKです。
今回はD:\devの下で解凍し、smarty-3.1.33というディレクトリができあがります。
これもお好みですが、バージョン付きが嫌でしたら、シンボリックリンクを貼っておけばよいかと思います。
今回はsmartyという名前でリンクを貼りました。
#コマンドプロンプトを管理者で開きます。
D:\dev>mklink /D smarty smarty-3.1.33
smarty <<===>> smarty-3.1.33 のシンボリック リンクが作成されました
Smartyのパスについて
Smartyを使う為にはphpにSmarty.class.phpをインクルードする事になりますので、パスを解決してあげる必要があります。
方法は3つほどあります。
- phpコードの中にインクルードするパスを指定してあげる。
- php.iniのinclude_pathを設定してあげる。
- phpの中で、ini_set()でインクルードパスを追加する。
どれでも良いのですが、個人的な感想としては、複数のサイトを構築しているときなど全てのサイトでバージョンが統一できることは稀ではないかと思いますので、個別のサイト毎に管理出来るようにしておくべきだと思います。
となると、2.php.ini以外の方法になりますね。
一応php.iniの変更箇所について触れます。
#php.ini 731行目あたり
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes" ←この行をコメント解除して適切に書き換える。
#変更後
include_path = ".;c:\dev\php\includes;d:\dev\smarty\libs\"
php.iniを書き換えたら、忘れずにApacheを再起動しましょう。
Smartyを使ったサイト環境
簡単なページを作って動作確認したいと思いますが、そのためにはサイト側の環境も整える必要があります。
関連するディレクトリについて
#Smartyのインストールパス(Smarty.class.phpの場所) D:\dev\smarty\libs\ #テスト用サイトのディレクトリ D:\dev\htdocs\smarty_test \cache #Smartyが使うキャッシュが書き込まれる。 \configs #テンプレートで呼び出す変数を定義したファイルを置く。 \htdocs #実際のドキュメントルート。Webに公開するphpなどはここに。 \templates #smartyのテンプレートファイルを置く。 \templates_c #smartyがコンパイルしたテンプレートが書き込まれる。 #Apacheからみたドキュメントルート(シンボリックリンク) C:\Apache24\htdocs\smarty_test ->D:\dev\htdocs\smarty_test\htdocs
テスト用サイトのディレクトリについて
テスト用サイトのディレクトリは、上記のような役割を持ったディレクトリが必要となります。
(configsは無くても良いかもしれません。)
Apacheでドキュメントルートをhtdocsに貼っていますが、これはhtdocs以外のディレクトリはWebからアクセスできないようにするためにこのような構成にしています。これは必須ではありませんが、推奨として本家に記載されています。
動作確認
やっと準備が整ったので、動作確認ページを作成します。
簡単に言ってしまうとPHPで文字列を作って、テンプレートで表示してあげる、というつまらない物です。
まずはindex.php。
#D:\dev\htdocs\smarty_test\htdocs\index.php
<?php
//各ディレクトリの定数
define('SMARTY_DIR', 'd:/dev/smarty/libs/');
define('SMARTY_TMPL_DIR', 'd:/dev/htdocs/smarty_test/templates/');
define('SMARTY_COMPILE_DIR', 'd:/dev/htdocs/smarty_test/templates_c/');
define('SMARTY_CACHE_DIR', 'd:/dev/htdocs/smarty_test/cache/');
define('SMARTY_CONFIG_DIR', 'd:/dev/htdocs/smarty_test/configs/');
//Smarty読み込み
require_once(SMARTY_DIR.'Smarty.class.php');
//Smartyクラスのインスタンス生成
$smarty = new Smarty();
//ディレクトリ設定
$smarty->template_dir = SMARTY_TMPL_DIR;
$smarty->compile_dir = SMARTY_COMPILE_DIR;
$smarty->config_dir = SMARTY_CONFIG_DIR;
$smarty->cache_dir = SMARTY_CACHE_DIR;
//テンプレートファイル
$template = 'index.tmpl';
//表示用テスト用の文字列
$str1 = 'Smartyのテスト';
$str2 = 'こんにちは';
//文字列を変数名を指定してSmartyに渡す。
$smarty->assign('title',$str1);
$smarty->assign('msg',$str2);
//テンプレートを表示する
$smarty->display($template);
?>
index.phpの中身ですが、ディレクトリ設定までは別のPHPに外出ししてしまう事ができますね。
続いてテンプレートファイル
#D:\dev\htdocs\smarty_test\templates\index.tmpl
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>{$title}</title>
</head>
<body>
<h1>{$msg}</h1>
<h2>{$title}</h2>
</body>
</html>
PHP側の$smarty->assign('title',$str1);
で変数を渡して、テンプレートの{$title}
と書かれた場所に文字列が表示されます。
一応画像はこちら。
出力されたソースは次のようになっています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Smartyのテスト</title>
</head>
<body>
<h1>こんにちは</h1>
<h2>Smartyのテスト</h2>
</body>
</html>
テンプレートを見ていただければわかるように、ほぼHTMLそのままなので、デザイン担当の方なども扱いやすいのではないかと思います。
参考:Smartyのドキュメント : https://www.smarty.net/docs/ja/