1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPTALで非エンジニアが扱いやすいテンプレートを作ろう

Posted at

「デザイナーが作成した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に通すときなどに便利かなと思います。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?