「デザイナーが作成したHTMLにPHPでロジックを組み込む」
よくある話ですね。
<tr>
<td>りんご</td>
<td>ぶどう</td>
<td>バナーナ</td>
</tr>
「PHPでロジックを組み込んだHTMLをデザイナーが上手く扱えない」
これもよくある話です。デザイナーからしたらなんか余計なものが混じっているように見えますね。エディタのライブプレビューも使えません。
<?php $items = ['りんご', 'ぶどう', 'バナナ'] ?>
<tr>
<?php foreach ($items as $item): ?>
<td><?= $item ?></td>
</tr>
そして、「デザイナーが扱えなくなったテンプレートをサーバサイドエンジニアがメンテナンスする」という悪夢が生まれてしまうのです。
そんなあなたへの処方箋、PHPTALをご存知でしょうか。
以下、公式ドキュメントからの引用です。
ほとんどのテンプレートシステムがセクション検知のために ?>、<% %> もしくは のようなタグを使います。 これらはテンプレートシステムの開発を容易にしますが、テンプレートのデザイナーにとっては助けになりません。
TALは、そのほとんどのロジックをXMLの属性として隠蔽するので、XHTMLの構造と文法をくずすことはありません。
なので、TALのテンプレートはWebブラウザ(WYSIWYGエディタ等のライブプレビューでも)でプレビューできますし、プログラマーのエディタによるハイライト表示も可能です。
なるほどわからん。とりあえず先ほどのコードで試してみましょう。
まず、HTMLにはPHPTALの要素としてロジックを埋め込みます。
<tr>
<td tal:repeat="item items" tal:content="item">くだもの</td>
</tr>
注目して欲しいのが、この状態でもHTMLとして表示できるということです。
PHPで(あるいは他のテンプレートエンジンで)組み込んだ場合と比べ、そのままでもデザイナーが扱える形を保てているのが分かると思います。
そして、PHP側では以下のように書いてみます。
$phptal = new PHPTAL('template.html');
$phptal->items = ['りんご', 'ぶどう', 'バナナ'];
echo $phptal->execute();
得られた結果がこちらです。
<tr>
<td>りんご</td>
<td>ぶどう</td>
<td>バナーナ</td>
</tr>
個人的にはWebアプリ作成よりも、帳票作成などでペライチで作ったHTMLに値を割り当ててmPDF
に通すときなどに便利かなと思います。