続・テンプレートを考える
前回の日記で「ロジックの書けないテンプレートエンジンを作ってみたいなあ」と書きましたが、良い実装案が浮かばないため、きれいさっぱり忘れることにしました。忘れるのは私の特技です。
そのかわり、良いアイディアが浮かびました。「XSLT風のテンプレートエンジン」です。
XSLTと同等の変換処理ができれば、「データをどのようなフォーマットで出力するか指定する」というテンプレートエンジンの目的は達成できるはずです。
とはいえ、本当にデータをXMLにして変換するのは面倒です。そこで、連想配列をテンプレートに渡すと変換が行なわれるよう実装します。
さくっと実装してみたところ、下記処理に相当するメソッドがあれば事足りそうな感じでした。
- テキスト出力(xsl:text)
- 条件分岐(xsl:if、xsl:choose)
- ループ処理(xsl:for-each)
- テンプレート呼び出し(xsl:call-template)
単なる「便利メソッドのないSmarty」のような気もしますが、それこそが私の欲しかったものなのかもしれません。