【PHP】テンプレートエンジン Smarty入門① 導入編

Smarty入門

PHPで使用できるテンプレートエンジンのライブラリ、Smartyの導入と基本的な設定についてメモします。

環境: Smarty 3.1、PHP 7.4.4

テンプレートエンジンとは

PHPはHTMLファイル上に直にプログラムを書き込むことも出来るスクリプトですが、
コードの記述量が増えたりプログラムによる処理が複雑化した場合などにHTMLの構造とロジックの見た目上の切り離しがしにくくなり、保守作業や変更を行いづらくなります。

Smartyをはじめとしたテンプレートエンジンと呼ばれるライブラリの仕組みを使用する事でHTML上のPHPプログラムの記述をよりシンプルにすることが出来ます。

ComposerでSmartyを導入する

Smartyはライブラリの公式サイトから直接ソースコードをダウンロードする事も出来ますが、

PHPパッケージマネージャーのComposerを使えばより簡単にセットアップ出来ます。

(Composerの導入については下記記事で紹介)

(Mac)Composerを使用したLaravelのインストールとプロジェクト作成

ターミナルを開き、プロジェクトのパスで以下のコマンドを実行する

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」でも同様に動作します。

Smarty公式ドキュメント日本語版

Follow me!

【PHP】テンプレートエンジン Smarty入門① 導入編” に対して2件のコメントがあります。

コメントは受け付けていません。