tokuhirom's Blog

Template Cascading についてかんがえてみた

https://github.com/tokuhirom/Template-Cascading

前回の話は、DOM ベースでうわがきすればいいんじゃね、っていう話が本筋だということにきづいたので、そういう風にできるライブラリをつくってみた。Just a PoC なんですけど。

ってあたりのことをかんがえてたら、できた。

とりあえず PoC なので YAML をつかっている。

たとえば base が

<!doctype html>
<html>
    <head>
        <title>base</title>
    </head>
    <body>
        <div class="container">
            <div id="Content">
                main content here
            </div>
        </div>
    </body>
</html>

みたいな HTML のときに、子テンプレートを以下のようにかく。

---
'title': '[% user %] page'
'#Content': |+
  Wow! [% user %] is [% sex %]!!!

そうすると、テンプレートのレンダリングは以下のようになる

Template::Cascading->new(
    tmpl => $xslate, # or any Tiffany-ish object
    html   => slurp('t/test/simple/base.html'),
)->cascade('t/test/simple/detail.yml', {
    user => 'John',
    sex  => 'male',
})->to_html, <<'...');

ベースとなる HTML をどれにするかは、YAML の方にかいたほうがいいかもしれない。

パーザを書くのが面倒だから、汎用フォーマットであるところの YAML をつかったけど、本当は YAML じゃない方がつかいやすいとおもう。