僕がつくってるフレームワークであるところの 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 でつかうにははやいとおもうけど、いろいろつかってみてあげるといいんじゃないかとおもうです。そこそこもうつかえるかんじ。