- 開発技術
テンプレートエンジンSmartyとは?特徴や使用感を解説
- PHP
Smartyとは
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
SmartyはPHPベースのテンプレートエンジンです。
PHPを使用したウェブアプリケーションの開発において、HTML/CSS、JavaScriptなどのフロントエンドのコードとロジックを分離することができます。
コードを分割することで、PHPコードとテンプレートコードの混在を避け、コードの再利用性や保守性を向上させます。
Smartyの特徴
Smartyの特徴として以下のような点があげられます。
・ロジックの分離
Smartyを使用してテンプレートコードとPHPコードのロジックを分離させることで、デザイナーやフロントエンド開発者が、PHPコードに触れることなくテンプレートを編集することができます。
・独自のテンプレート言語
Smartyは、PHPの構文のような独自のテンプレート言語を提供しています。テンプレート内で変数の挿入や操作、ループや条件分岐、関数なども扱うことができます。
・キャッシュ機能
Smartyはテンプレートをキャッシュする機能を提供しています。キャッシュ機能を利用することでテンプレートの再コンパイルをせずにキャッシュされたデータを読み込むことができます。これによって、ウェブページの読み込み速度を高速化することができます。
Smartyを使ってみる
今回はSmartyを使って、教科ごとにテスト結果の合否が分かるテーブルが表示されるページを作成していきます。
1.ダウンロード
Smartyの公式サイトからSmartyの最新バージョンをダウンロードします。
https://www.smarty.net/download
ダウンロードしたファイルをプロジェクトのルートディレクトリに配置して解凍します。
2.ディレクトリの作成
テンプレートを格納するテンプレートディレクトリとコンパイルされた後で自動的にテンプレートを格納するコンパイルディレクトリを作成します。
mkdir templates
mkdir templates_compile
3.テンプレートの作成
PHPファイルとテンプレートファイルを作成します。テンプレートファイルはtemplatesディレクトリ直下に作成します。
testResult.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php // Smartyのクラスファイルの読み込み require_once('./libs/Smarty.class.php'); // Smartyの初期化 $smarty = new Smarty(); // ファイルを格納するディレクトリの設定 $smarty->setTemplateDir('templates'); $smarty->setCompileDir('templates_compile'); // テンプレートに渡すデータの定義 $title = 'テスト結果'; $name = '太郎'; $results = [ ['subject' => '国語','point' => 100], ['subject' => '数学','point' => 88], ['subject' => '英語','point' => 19], ]; // テンプレートの変数に格納 $smarty->assign('title', $title); $smarty->assign('name', $name); $smarty->assign('results', $results); // テンプレートの表示 $smarty->display('testResults.tpl'); ?> |
$smarty->assign
メソッドでテンプレートの変数に格納して、$smarty->display
メソッドでテンプレートを表示しています。
templates/testResults.tpl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<!DOCTYPE html> <html> <head> <title>{$title}</title> </head> <body> <h1>{$title}</h1> <p>{$name}</p> <table border="1"> <thead> <tr> <th>教科</th> <th>点数</th> <th>合否</th> </tr> </thead> <tbody> {foreach from=$results item=$result} <tr> <td>{$result.subject}</td> <td>{$result.point}</td> {* 点数が50点以上であれば合格 *} {if $result.point >= 50} <td>合格!</td> {else} <td>不合格...</td> {/if} </tr> {/foreach} </tbody> </table> </body> </html> |
Smartyのデフォルトのデリミタは{
と}
で、その中にコメントや変数、条件・ループなどの構文を記述しています。
画面を開くとと以下のように表示されました。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>