今回は、PHPのテンプレートエンジン Smarty を利用して、
簡単なHelloWorldページを表示させるところまでメモしようと思います。
[Smarty利用方法]
- Smarty zip に含まれている libs フォルダを丸ごと配置する
-
実行するphpに、Smarty.class.phpを読み込ませる
- templatesフォルダをlibフォルダと同階層に作成して、そこにテンプレートファイル(.tpl)を配置する
- templates_cフォルダをtemplatesフォルダと同階層に作成する
Smarty ダウンロード
まずは、Smartyの公式サイトからモジュールを取得します。
https://www.smarty.net/docsv2/ja/
Downloadというリンクからダウンロードページに移動します。
近日に確認した際には、3.1.35が最新のため、こちらを利用します。
バージェン名をクリックするとGithubページに遷移しますので、こちらから取得します。
zipをダウンロードしたら、解凍します。
複数ファイルが格納されていますが、動作に必要なものはlibsに配置されています。
Smarty 配置
Smartyを利用する場合、Smartyのzipに含まれていたlibsフォルダを丸ごと配置します。
そして、libsフォルダと同階層にtemplates、templates_cというフォルダを作成します。
templatesには、テンプレートファイル(tpl)を配置します。
templates_cには、テンプレートの内容をコンパイルしたファイルが配置されます。
※上記ではpublicフォルダに、Smartyを利用するPHPファイルを配置していますが、
Smarty.class.phpを読み込めれば、どの配置でも問題ありません。
Smarty HelloWorld 実装
Smartyを利用してViewを表示させるPHPを実装します。
<?php // Smartyクラスを読み込む require_once("../libs/Smarty.class.php"); // Smartyのインスタンスを生成 $smarty = new Smarty(); // テンプレートディレクトリとコンパイルディレクトリを読み込む $smarty->template_dir = "../templates/"; $smarty->compile_dir = "../templates_c/"; // assignメソッドを使ってテンプレートに渡す値を設定 $smarty->assign("name", "World"); // HelloWorldの「World」表示用 $smarty->assign("kazu", 10); // loop count用 $smarty->assign("if_flag", true); // if 判別用 // 表示テンプレート指定 $smarty->display("Hello.tpl");
続けて、テンプレート側も実装します。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello World!</title> </head> <body> <div>Hello.tpl</div> <div>Hello {$name}!</div> <hr> {* ループサンプル *} <ul> {for $foo=1 to $kazu} <li>{$foo}</li> {/for} </ul> <hr> {* 条件分岐サンプル *} {if $if_flag} <p>booleanは、、、$if_flag:{$if_flag}</p> {else} <!-- 到達不能 --> {/if} </body> </html>
コメントは、{**}という形で表記します。
HelloWorldの表示だけでなく、ループと条件分岐の簡単なサンプルも実行してみます。
実行確認
実行確認は、通常のPHPと同様にApacheなどのhttpサーバーを起動して行います。
XAMPやMAMPを利用しても良いですが、
PHPのインストールしている場合には、ビルトインサーバーなどを利用すれば簡単に実行確認できます。
Apacheを起動してアクセスすると以下の様に表示されれば、正常に動作しています。
今回のメモは以上となります。
昨今では、PHPですとLaravelが人気のため、
Blade以外のテンプレートエンジンは、新規で採用される機会は少ないと思います。
また、Laravel以前に、モダンなWebシステム開発では、
勢いのあるフロントエンド(js)を採用して実装することが殆んどだと思いますので、
案件特有の事情がなければ、無理して勉強する必要性はほとんどありません。
ただ、Smarty自体はまだリリースも定期的に行われている様ですし、
フロントエンド(js)の技術を利用することなく、
ViewとControllerの役割をはっきりと分けたい場合には、選択を検討しても良いかもしれません。
一番、Smartyに出会う可能性があるのは、
古いシステムを少しだけ回収する様なケースか、完全に一から作り直す際に、古いシステムのコードを分析するときでしょうか。
もしそういったケースで、Smartyを扱う&Smartyの実装を読むことになっても、
公式のドキュメントも分かりやすく書かれていますので、そこまで苦労することは無いと思います。
https://www.smarty.net/docsv2/ja/