Template-Toolkit の標準プラグインに Template::Plugin::XML::Simple があります。名前のとおり、TT から XML::Simple を利用するプラググインです。
例えば、RssRolling の OPML ファイル を opml.xml という名前で保存しておき、
[% USE data = XML.Simple('opml.xml', keyattr => ['outline']) -%]
<ul>
[% FOREACH blog = data.body.outline -%]
<li>[% blog.url | html %]</li>
[% END -%]
</ul>
という TT のテンプレートを書きます。これを simple.tt とします。で、tpage (TT に付属のテンプレートプロセッサ。コマンドラインからテンプレートファイルを引数に渡して実行すると実際の出力が得られます。) を実行します。結果、
$ tpage simple.tt <ul> <li>http://www.home-room.org/blog/my/</li> <li>http://www.7438.com/</li> <li>http://gnk.s15.xrea.com/</li> <li>http://artifact-jp.com/</li> <li>http://www.aga-ye.com/</li> ...
という出力が得られます。ここまで Perl でのロジックは一切書いてません。ロジックを一切書いてないということは Perl スクリプトを使わずに完結するということです。
例えば Movable Type の Template Toolkit プラグイン を使うと Movable Type のタグから TT テンプレートを取り込むことができます。(プラグインの実装はかなり簡単、TT の $tt->process の結果を return してるだけ。) これと先ほどの Template::Plugin::XML::Simple を併用すると、
<$MTT template="/path/to/simple.tt"$>
というタグを記述してやることで、先ほどの OPML の結果を Movable Type の出力に加えられます。実際、このプラグインのサンプル実装は blogroll の OPML を使ってそれをやってました。
他にも Template::Plugin::XML::ほげほげ はいくつかあって、例えば Template::Plugin::XML::RSS を使うと
[% USE rss = XML.RSS('index.rdf') -%]
<ul>
[% FOREACH item = rss.items -%]
<li>[% item.title %]</li>
<% END -%>
</ul>
というテンプレートで
$ tpage rss.tt <ul> <li>aiko の新曲は巨人戦</li> <li>リンクをリスト化する Bookmarklet</li> <li>Movable Type 2.6 から Movable Type 3.0 へのアップグレード</li> ... </ul>
といった結果が得られたりします。また。 Template::Plugin::XML::LibXML を使えば、
[% USE docroot = XML.LibXML('opml.xml') -%]
This document was written by [% docroot.find("/opml/head/ownerName") %].
から
$ tpage libxml.tt This document was written by naoya.
といった結果が得られます。
Movable Type のTemplate Toolkit プラグインと wget があれば、他サイトの RSS や Amazon Web サービスの結果など任意の XML 出力をスクリプトいらずで取り込むことができますね。
確かに Perl のコードは入っていませんが、FOREACH... END はミニ言語によるロジックなのではないかと思いましたが、こういうのはロジックとは呼ばれないものなのでしょうか。
ロジックと呼びますね。
ここで焦点にしているのは newbie さんの指摘にもありますとおり、
・ロジックを書いていない
ではなくて
・Perlスクリプトによるロジックを書いていない
の方です。mt-tt プラグインから取り込むにあたって、XML::Simple の操作を(テンプレートではなく)スクリプトから行う必要があったとすると、プラグインのコードに手をつけるなどの修正が必要になりますが、Template::Plugin::XML::Simple はそれを必要としない、というところが本論です。 ;)
[2] Posted by: naoya at July 15, 2004 07:16 AM [返信]素朴な疑問に丁寧に回答して頂き恐縮です。
「ここまで Perl でのロジックは一切書いてません。ロジックを一切書いてないということは」の部分は、
「ここまで Perl でのロジックは一切書いてません。(Perlでの) ロジックを一切書いてないということは」と読めばよかったですね。
まことに空気嫁でした。