July 14, 2004

Template::Plugin::XML::ほげほげ

[ Perl ]

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 出力をスクリプトいらずで取り込むことができますね。

Posted by naoya at July 14, 2004 09:44 PM | トラックバック (0)  b_entry.gif
トラックバック [0件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/1125
コメント [3件]

確かに Perl のコードは入っていませんが、FOREACH... END はミニ言語によるロジックなのではないかと思いましたが、こういうのはロジックとは呼ばれないものなのでしょうか。

[1] Posted by: newbie at July 15, 2004 12:11 AM [返信]

ロジックと呼びますね。

ここで焦点にしているのは newbie さんの指摘にもありますとおり、

・ロジックを書いていない

ではなくて

・Perlスクリプトによるロジックを書いていない

の方です。mt-tt プラグインから取り込むにあたって、XML::Simple の操作を(テンプレートではなく)スクリプトから行う必要があったとすると、プラグインのコードに手をつけるなどの修正が必要になりますが、Template::Plugin::XML::Simple はそれを必要としない、というところが本論です。 ;)

[2] Posted by: naoya at July 15, 2004 07:16 AM [返信]

素朴な疑問に丁寧に回答して頂き恐縮です。
「ここまで Perl でのロジックは一切書いてません。ロジックを一切書いてないということは」の部分は、
「ここまで Perl でのロジックは一切書いてません。(Perlでの) ロジックを一切書いてないということは」と読めばよかったですね。
まことに空気嫁でした。

[3] Posted by: newbie at July 15, 2004 09:10 AM [返信]
コメントする









名前、アドレスを登録しますか?