Smarty(3.1)入門① 導入編

Smarty(3.1)入門

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

環境:Smarty 3.1、PHP 7.4.4、Mac OS 10.13.6


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

PHPはHTMLページ(view)にプログラムを直に書き込むことも出来る言語なのですが、
ある程度の大きさのWebサイトなど、コードの記述量が増えたりプログラムのロジックが複雑化した場合にHTMLの構造とプログラム部分が混在して保守作業や変更、記述の追加が難しくなってきます。

Smartyをはじめとしたテンプレートエンジンと呼ばれるライブラリを使用する事で
HTMLページとPHPのプログラムを切り離す事が可能となります。

ComposerでSmarty (3.1)を導入する

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

パッケージマネージャーの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"
    }
}

※既にcomposerで他のライブラリを使用していた場合は、composer.jsonにSmartyが追記されます。

テンプレート、その他実行ファイルを作成する

Smartyライブラリのインストールが出来たら以下のように実行に必要なソースを作成していきます。

(ファイル構成)

.
├── composer.json
├── composer.lock
├── index.php
├── templates
│   └── index.tpl
├── templates_c
└── vendor
    ├── autoload.php
    ├── composer
    └── smarty

テンプレート用とコンパイル用のディレクトリを作成する

テンプレート(画面のファイル)を格納するディレクトリと、
Smarty実行時に自動的にコンパイルされた後のテンプレートを格納するディレクトリを作成します。

場所はどこでも大丈夫ですが、
今回は実行ファイル(index.php)と同じプロジェクトのルートに作成します。

(ターミナルを開き、以下を実行)
・テンプレートのディレクトリ作成
mkdir templates

・コンパイルファイルのディレクトリ作成
mkdir templates_c

(注意)
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 とする。

※(タグとして出力されないようにする事)

5. 表示するテンプレートファイルを指定する
displayメソッドの引数に、表示するテンプレートファイルを指定します。
templates/index.tplをブラウザへ出力します。


index.phpを実行して、画面が表示されればOKです。
テンプレートファイルの拡張子「.tpl」は「.html」でも同様に動作します。

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

Follow me!

Smarty(3.1)入門① 導入編” に対して2件のコメントがあります。

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