こんにちは!独学プログラマー&ライターのつぶらやです。
PHPで開発をしていると、以下のような事を思う事があります。
同じような内容を表示する場合のHTMLのひな型が欲しい
簡単に表示とプログラムを分割するためのツールってないの?
今回は上記のような悩みを解決するために、以下のお話をしようと思います。
テンプレートって何だろう?
PHPでHTMLのテンプレートを作る
テンプレートエンジンの種類
実際PHP開発のお仕事につく場合には必要になってくる知識ですので、この機会に是非覚えておいてください。
テンプレートって何?
テンプレートと聞くと何を思い浮かべますか?
資料を作るためのベースのファイル、プラスチックの板がくり抜かれた製図用の用具。
世の中には色んなテンプレートが存在します。
しかし、PHPでテンプレートというとHTMLのテンプレートやテンプレートエンジンを指すことがほとんどです。
HTMLのテンプレートについて
HTMLのテンプレートは、PHPで整形したデータを渡して表示するためのHTMLファイルです。
テンプレートエンジンを使用せずにPHPをそのまま使い、プログラムのファイルと表示するためのファイルを分ける場合に使います。
テンプレートエンジンについて
PHPのプログラムファイルと表示ファイルを分割して開発できる便利なツールです。
例えば、PHPプログラムを書く担当とHTMLやCSSのコーディング担当が分かれている場合があったとします。
その場合、プログラムのファイルと表示のファイルが分かれていると、開発が同時に進められる利点があります。
ファイルが分かれていない場合、プログラムの開発が終わらないとコーディングが出来ない可能性があるのです。
PHPで使用するテンプレートについて理解していただけましたでしょうか。
次の章からHTMLのテンプレートの具体的な作り方と、テンプレートエンジンについて説明していきます。
PHPでHTMLのテンプレートを作る
テンプレートエンジンを使用せずPHPだけを使用して開発する場合があったとします。
その場合にプログラムのファイルと表示するためのファイルを分ける、具体的な方法を解説します。
表示するHTMLファイルを作成
まずはじめに、表示のためのHTMLのテンプレートのtemp.htmlを作成します。
temp.html <h2>この記事は、_+test+_です。</h2>
大事なのは【_+test+_】の部分です。
ここが、次に作成する関数の中で置き換わるのです。
テンプレート機能を作成
次にテンプレート機能のためのfunc.phpを作成します。
func.php <?php function func_temp($html_file, $disp_data) { // テンプレート表示用の関数 $html_data = file_get_contents($html_file); // テンプレートファイルを読み込み $replaced = '/_+(.*)+_/'; // 検索するパターンの指定 $html_data = preg_replace($replaced, $disp_data, $html_data); // 置換実行 return $html_data; // 表示用のHTMLデータを返す } ?>
各行にコメントを入れていますが、簡単に言うと
①前章で作ったHTMLのテンプレートを読み込む
②HTMLのテンプレートの中の【_+】【_+】で囲まれた部分を置き換える
③表示する内容を返す
という流れです。
アクセスするためのPHPファイルを作成
最後に、ブラウザ等から呼び出すPHPファイルのaccess.phpを準備します。
access.php <?php require 'func.php'; // テンプレート機能ファイルを読み込む $data = 'PHPのテンプレートって何で作る?'; // 画面に表示させるデータを登録 echo func_temp('temp.html', $data); // テンプレート機能関数を呼ぶ ?>
準備は以上で完成です。
アクセスするためのPHPファイルにアクセスする
結果を確認してみましょう。
結果 この記事は、PHPのテンプレートって何で作る?です。
temp.htmlに書いた【_+test+_】の部分が、access.phpに書いた【PHPのテンプレートって何で作る?】に置き換わりました。
PHPだけでもプログラムのファイルと表示のファイルを分ける事ができました。
テンプレートエンジンの種類
前章ではPHPだけでもファイルを分けて開発できるお話しをしました。
しかし渡したデータが配列だった場合などは、結局HTMLファイルの中にPHPのコードを書かなくてはいけません。
テンプレートエンジンを使うとPHPを知らなくてもforeachなどの動きを実現させることができます。
どんなテンプレートエンジンがあるかご紹介しましょう。
twig
symfonyというPHPのフレームワークのためのテンプレートエンジンですが、他のフレームワークでも使用できます。
.twigという拡張子のファイルが出来ます。
PHPファイルから$stringという変数が渡ってきた場合、{{ string }}の形で表示させることが出来ます。
smarty
歴史のあるテンプレートエンジンです。
フレームワークに依存せず使用できます。
.tplという拡張子のファイルが出来ます。
PHPファイルから$stringという変数が渡ってきた場合、{ $string }の形で表示させることが出来ます。
blade
laravelというPHPのフレームワークのためのテンプレートエンジンです。
先に紹介したtwigやsmartyよりも新しいフレームワークです。
laravelを使用しているなら間違いなくこれを選択しましょう。
.blade.phpという拡張子のファイルが出来ます。
PHPファイルから$stringという変数が渡ってきた場合、{{ $val }}の形で表示させることが出来ます。
まとめ
今回はPHPのテンプレートについてお話しました。
PHPだけで作りきるか、テンプレートエンジンを使用するか迷う事もあると思います。
学習時間を考えてその時点で導入されているものだけでまかなう場合も、開発現場では沢山あります。
開発する機能の大きさ、メンバーのスキルによって答えを出すしかありません。
その判断をするために、どんな方法(本日の内容の場合どんなテンプレート)が選択できるかを知っておくことが大切だと私は思います。
それではまた。