Template Cascading についてかんがえてみた
https://github.com/tokuhirom/Template-Cascading
前回の話は、DOM ベースでうわがきすればいいんじゃね、っていう話が本筋だということにきづいたので、そういう風にできるライブラリをつくってみた。Just a PoC なんですけど。
- カスケーディングって HTML んときしかつかわないよね
- カスケードする対象って DOM 要素単位だよね
- カスケードして、上書きされる対象を親の側で指定するのだるくね?
ってあたりのことをかんがえてたら、できた。
とりあえず 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 じゃない方がつかいやすいとおもう。
Published: 2011-02-08(Tue) 02:53