Asamashi09のテンプレート・システムにはjTemplatesを使うことにした。あんまり書きやすくない気もする。でも探すの面倒だった(作るのはもっと面倒)。とりあえずリモートのテンプレート・ファイルを指定して出力できるようにはなった。
テンプレートのロードはコールバック関数名固定のJSONPでやってみようとしたが、getJSON()
はコールバック関数名を自動生成してリクエストするので、固定だと無理(多分)。getScript()
ではロードすることだけならなんとかなったのだけど、テンプレートURLが404の場合とかうまく対応できなかった。Ajax Eventsのerror
が発動しなかったよ……。
結局、テンプレート・ファイルはJSONにしてYahoo! Query LanguageをJSONPプロクシみたいに使うことにした。最初はPipes使ったのだけど、Pipesだと取得したデータにHTMLっぽいコードが含まれる場合、良きに計らってくれてしまうので、
<a href="{$T.DetailPageURL}">
などという部分が、
<a href="http://example.com/{$T.DetailPageURL}" rel="nofollow">
とか存在しない絶対URLになったりする。場合によってはhref
が削除されたりも(ダメそうだったのであんまり調べてない)。データを拾うのは任せたいけど、データの加工はして欲しくない場合はYQLのが向いてるっぽい。YQLはURL以外何も指定しなければ、ほぼそのまんまの形でデータを返してくれるので。一部欠落したり、可逆ではなくなってしまうことに注意は必要だけど。
テンプレートに渡されるデータはAmazon Web ServicesでItemLookup
した時に返ってくるXMLのItem
要素以下(ResponseGroup
はSmall,Images
)なので、jTemplateの作法に従ったテンプレート内で、
{$T.ItemAttributes.Title}
と書くと商品名が出力されることになる。デフォルトのテンプレート・ファイルを見ればわかるはず(読みづらいけど)。
もっと書きやすいテンプレートにしたい。