【PHP】テンプレートエンジン Smarty入門① 導入編
目次
Smarty入門
PHPで使用できるテンプレートエンジンのライブラリ、Smartyの導入と基本的な設定についてメモします。
環境: Smarty 3.1、PHP 7.4.4
テンプレートエンジンとは
PHPはHTMLファイル上に直にプログラムを書き込むことも出来るスクリプトですが、
コードの記述量が増えたりプログラムによる処理が複雑化した場合などにHTMLの構造とロジックの見た目上の切り離しがしにくくなり、保守作業や変更を行いづらくなります。
Smartyをはじめとしたテンプレートエンジンと呼ばれるライブラリの仕組みを使用する事でHTML上のPHPプログラムの記述をよりシンプルにすることが出来ます。
ComposerでSmartyを導入する
Smartyはライブラリの公式サイトから直接ソースコードをダウンロードする事も出来ますが、
PHPパッケージマネージャーのComposerを使えばより簡単にセットアップ出来ます。
(Composerの導入については下記記事で紹介)
ターミナルを開き、プロジェクトのパスで以下のコマンドを実行する
composer require smarty/smarty
完了すると、プロジェクト内にSmartyとその他必要なライブラリがインストールされています。
.
├── composer.json
├── composer.lock
└── vendor
├── autoload.php
├── composer
└── smarty
composer.jsonにSmartyとインストールしたバージョンが記述されている事が確認出来ます。
{
"require": {
"smarty/smarty": "^3.1"
}
}
テンプレート、その他実行ファイルを作成する
Smartyライブラリのインストールが出来たら以下のように実行に必要なソースを作成していきます。
.
├── composer.json
├── composer.lock
├── index.php
├── templates
│ └── index.tpl
├── templates_c
└── vendor
├── autoload.php
├── composer
└── smarty
テンプレート用とコンパイル用のディレクトリを作成する
テンプレート(html)を格納するディレクトリと、
Smarty実行時に自動的にコンパイルされた後のテンプレートを格納するディレクトリを作成します。
場所と名称は任意ですが、今回は実行ファイル(index.php)と同じプロジェクトのルートに以下のように作成します。
テンプレートのディレクトリ作成
mkdir templates
コンパイルファイルのディレクトリ作成
mkdir templates_c
コンパイルファイルのディレクトリはサーバがファイルを書き込みできるようにするためにアクセス権限を広くします。
chmod 777 templates_c
テンプレートファイルを用意する
テンプレートファイルを作成します。
templates/index.tpl
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>{$title}</title>
<style>
.red{ color: #ff0000; }
</style>
</head>
<body>
<h1>{$title}</h1>
<p class="{$class}">Hello! {$name}</p>
</body>
</html>
{}の中にSmartyで設定する変数を埋め込む事が出来ます。
実行ファイルからSmartyクラスを使用する
実行ファイル index.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
// 1
$smarty = new Smarty();
// 2
$smarty->template_dir = __DIR__ . '/templates/';
$smarty->compile_dir = __DIR__ . '/templates_c/';
// 3
$smarty->assign('title', 'Smarty Lesson!');
$smarty->assign('class', 'red');
$smarty->assign('name', 'Taro');
// 4
$smarty->escape_html = true;
// 5
$smarty->display('index.tpl');
1. Smartyクラスを初期化
Smartyライブラリの本体であるSmartyクラスのインスタンスを初期化します。
$smarty = new Smarty()
Smartyクラスのパスは /vendor/smarty/smarty/libs/Smarty.class.php ですが、
今回のようにcomposerで導入した場合、上記のように実行ファイルの先頭でvendor/autoload.phpを読み込めばそのままSmartyクラスが使用可能になります。
2. Smartyのプロパティを設定する
「template_dir」 テンプレートのパス
「compile_dir」 コンパイル後の保存パス
それぞれ前述で作成済みのディレクトリを実行ファイルからのパスで指定します。
3. Smarty変数に値を代入する
assignメソッドでテンプレートで利用する変数を定義します。
assign(‘変数名‘, ‘値’)
→ テンプレート側で{$変数名}として取得、利用する事が出来ます。
4. (重要)テンプレートへの出力をHTMLエスケープする
プログラムからHTMLへ表示を行う際はセキュリティの観点で基本的に全ての文字列を※エスケープする必要があるので
escape_html = true とする。
※ 文字列がhtmlタグとして出力されないようにすること
5. 表示するテンプレートファイルを指定する
displayメソッドの引数に、表示するテンプレートファイルを指定します。
templates/index.tplをブラウザへ出力します。
index.phpを実行して、画面が表示されればOKです。
テンプレートファイルの拡張子「.tpl」は「.html」でも同様に動作します。
“【PHP】テンプレートエンジン Smarty入門① 導入編” に対して2件のコメントがあります。
コメントは受け付けていません。