テンプレートエンジンを使ってMVC


はじめに

おはようございます。こんにちは。こんばんは。
ワタタクです。
今回はテンプレートエンジンの使い方について見ていきましょう。

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

WEB開発において主流の作成法には「MVC」が採用されている場合がほぼ多いです。
ですが、Javaにはjspと呼ばれるものが存在し、MVCができますが、
PHPではjspみたいなのが存在しないため、MVCが出来ません。(やろうと思えば多分できる)
そこで出てくるのがテンプレートエンジンです。
つまり、テンプレートエンジンはコントローラーとビューを分けるものです。

テンプレートエンジンの使い方

テンプレートエンジンにはいくつか種類があり、PHPで手っ取り早くMVCを実装させるためにCakePHP,Laravel,codeigniter
などのフレームワークを使えば簡単に実装できます。(気が向けば、各フレームワークの解説記事を書きます。)
ですが、今回はそういったフレームワークは使わず、Smartyというテンプレートエンジンを使います。

Smartyの使い方

公式ドキュメントを見れば全部書いてあるので、公式ドキュメント見ろ!!
って言えば良いのですがそれだと面白くないので書いていきます。

1.準備

Smartyを扱うにはある準備をしないと動きません。
まずはその準備から。

1.公式サイトから最新版のSmartyのZipファイルを入手する。
2.入手したZipファイルを解凍し、中にある「libsフォルダ」を丸ごと作成プロジェクト「smartytest」に配置する
3.smartytestフォルダ直下に「templates_c」、作成したテンプレートファイルを格納する「templates」を作成(Mac、Linuxの場合「templates_c」に対してPHPからの書き込み権限を与えておく。)
書き込み権限の与え方

$chmod 777 〜/template_c

または、右クリックし「情報を見る」をクリックし、書き込み権限を与える。
※templates_c フォルダは、テンプレートをPHPにコンパイルされたファイルを配置するフォルダ。

2.コントローラー(PHP)で行うこと。

1.「libsフォルダ」の中の「Smarty.class.php」を読み込む

require_once $_SERVER['DOCUMENT_ROOT']. '/smartytest/libs/Smarty.class.php';

2.Smartyオブジェクトを生成する

$smarty = new Smarty();

3.テンプレートが格納されているディレクトリを設定する。

$smarty->setTemplateDir($_SERVER['DOCUMENT_ROOT'].'/smartytest/templates/');

4.コンパイルされたテンプレートが保存されているディレクトリを設定する。

$smarty->setCompileDir($_SERVER['DOCUMENT_ROOT'].'/smartytest/templates_c/');

5.テンプレートを呼び出し、表示する

$smarty->display(templatesからの相対パスでテンプレート名(.tpl));

6.コントローラー(PHP)で作った変数をテンプレートに持っていく

$smarty->assign('テンプレートで使う変数(テンプレート変数)', コントローラー(PHP)で作った変数);

これぐらい知っておけばいけるかな?後はドキュメントで。
次はテンプレートの方を見ていきましょう。

3.テンプレート(.tpl)

ここではテンプレート(Smarty)で扱うことのできる構文について見ていきたいと思います。
構文についてはたくさんあるので必要最低限書きます。
それ以上の事はドキュメント参照でお願いします。

1.assignで持ってきた変数の使用方法

{$テンプレート変数}

[TIPS]

テンプレート変数は表示時に以下の書式で加工できる=修飾子

{$テンプレート変数|修飾子}
  • $message中の改行を改行タグに置き換える
{$message|nl2br}
  • 日時データをフォーマットして表示
{$date|data_format:'%Y年%m月%d日 %H:%M:%S'}
  • 初期値設定
{$message|default:''}

また、assignされたものがオブジェクトでそのメソッドを実行するまたはそのプロパティを取り出すとき

  • メソッド
{$foo->bar()}
  • プロパティ
{$foo->bar}

2.条件分岐

{if 条件}
〜
{elseif 条件}
〜
{else}
〜
{/if}

[TIPS]

smartyでの変数の存在判別

{if isset($var)}
 変数は存在してます
{else}
 存在してません。
{/if}

phpと同じくissetが使えます。
このようにPHP関数も組み込むことも出来ます。

3.ループ

{foreach from = テンプレート変数(配列) item = 各要素を格納する変数名 (name = ループの名前)}
〜
{foreachelse}
ループが回らなかった場合
{/foreach}

最後にコメントは以下のように書きます。

{* ここにコメントを書く *}

こんなものかな?

もし、何か間違い等がございましたらご連絡下さい。
最後まで読んでいただきありがとうございます。