Template::Toolkitでファイルのタイムスタンプを付加
Railsだとimage_tagを使えば画像ファイルの更新日時をくっつけて
<img src="foo.jpg?1234567890" />
みたいにしてくれて、画像が更新されればブラウザは画像をキャッシュしていても新しくリクエストしてくれたりする。で、Catalyst/Template::Toolkitだとどうやるんだろう?ってことで書いてみた。
これをlib/MyApp/Views/Pluginに置いて、MyApp::View::TTとかに書かれている__PACKAGE__->configに
PLUGIN_BASE => 'TclandSp::View::Plugin',
を追加して各テンプレートで
[% USE Ts %]
すれば、例えば
[% Ts.ts('/static/images/logo.jpg') %]
が
/static/images/logo.jpg?1234567890
になる。これをimgタグと組み合わせて
<img src="[% Ts.ts('/static/images/logo.jpg') %]" />
とかするといい。
以下メモ:
- -M演算子はperlのインタプリタが起動してからの相対日数を返すので、606024=86400をかけて、さらにインタプリタの起動した時刻$^Tを足し合わせることで絶対時間が得られる
- MyAppが入っちゃうのが残念。うまく回避したい。
- imgタグやlinkタグもまとめて出力してくれるメソッドも定義したけど、altやwidth、heightなんかも指定したくなったときに不便だなと思ってもっぱらTs.tsだけ使ってる。
- 複数テンプレートで共通で使うプラグインはPRE_PROCESSで呼んでるテンプレート中でまとめてUSEすると便利。
やっぱりフルスタックのRailsはデカいけど便利だ。