first impression for Text::Xslate
僕がつくってるフレームワークであるところの Amon に Xslate 対応をいれてみた。
かなり TT とおなじ感覚でつかえるかんじ。テンプレートの継承が追加されてるぐらいで、基本は TT とおなじかんじか。
フレームワークにくみこむときはこんなかんじ。
package Amon::V::Xslate; use strict; use warnings; use base qw/Amon::V::TemplateBase/; use File::Spec (); use Scalar::Util (); use Text::Xslate 0.001_08 (); sub import { my $class = shift; if (@_>0 && shift eq '-base') { my $caller = caller(0); no strict 'refs'; unshift @{"${caller}::ISA"}, $class; } } sub new { my ($class, $c, $conf) = @_; $conf->{path} ||= [ File::Spec->catdir($c->base_dir, 'tmpl') ]; my $xslate = Text::Xslate->new( $conf ); my $self = bless {context => $c, xslate => $xslate}, $class; return $self; } sub render { my ($self, $input, $params) = @_; my $output = $self->{xslate}->render($input, { c => $self->{context}, %{ $params || +{}} }); return $output; } 1;
base.tx が
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>NoPaste</title> <link href="<:= $c.uri_for('/static/css/main.css') :>" rel="stylesheet" type="text/css" media="screen" /> </head> <body> <div id="Container"> <div id="Header"> <a href="<:= $c.uri_for('/') :>">Yet Another NoPaste Site</a> </div> <div id="Content"> : block content -> { 'body here' : } </div> <div id="FooterContainer"><div id="Footer"> <div class="about">OreOre::NoPaste, powered by <a href="http://amon.64p.org/">Amon</a></div> <div class="copyright">Copyright (C) 2009 64p.org</div> </div></div> </div> </body> </html>
index.tx がこんなん。
: cascade 'base.tx'; : around content -> { <form method="post" action="<:= $c.uri_for('/post') :>" class="nopaste"> <p class="nm"><textarea name="body" rows="20" cols="60"></textarea></p> <p class="nm submit-btn"><input type="submit" value="post" /></p> </form> : }
感覚としては、かなり TT にちかいので、TT が好きな人だったら結構いけるっぽい。
TT にくらべると格段にはやいし。
インターフェイスなどがオレの感覚でつかいにくいなーとおもったところについては、もろもろかえてもらったので、あたらしいバージョンではよりつかいやすくなってんじゃないかとおもうっす。
まだ production でつかうにははやいとおもうけど、いろいろつかってみてあげるといいんじゃないかとおもうです。そこそこもうつかえるかんじ。