TTで-fを評価する方法

pdfみたいに、あるファイルが存在するかどうかをTTで調べてファイルが存在する場合にアイコンなんかを表示させたい、

つまりTTで-fを評価したかったのだが、いいやり方が思い浮かばなかった(みつからなかった)のでPERLブロックで評価してしまった。

[% PERL %]
  my $pdf = "/static/PDFs/". [% some %] . ".pdf";
if(-f "root$pdf"){
  print '<img src="http://www.kzfmix.com/static/images/png/PDF_icon.gif" /></a>';
}
[% END %]

むむむな感じなんだけど。

Template Toolkitで正規表現マッチ

セッションのユーザー名と、パスに含まれているユーザー名が同じ場合にeditのリンクを出したいときとか、^/kzfm$みたいなマッチをさせたかったので調べた。

こんな風にmatchというメソッドを使うといいそうだ。

[% name = 'Larry Wall' %]
[% matches = name.match('(\w+) (\w+)') %]
[% matches.1 %], [% matches.0 %]        # Wall, Larry

Template ToolkitのVMethodってほかにも結構いろいろあんのね。

TTで空白行を除く

TT使ってできたHTMLのソースを見ると、IF文の部分とかが空白行になってしまい、やたらとスカスカ全開のHTMLが気持ち悪かったりして、コードの見やすさを犠牲にして、改行を削ってJAPHみたいなあとから読んだらよくわからんようなTT作ったりたんだけど、、、

-をつければchompして空白行を消すことができるということをCatalyst::Manual::Tutorial::CatalystBasicsで知った。

[% FOREACH book IN books -%]
  <tr>
    <td>[% book.title %]</td>
    <td>[% book.rating %]</td>
    <td>
    etc,etc
    </td>
  </tr>
[% END -%]
</table>

とかやっておくと

      </tr>

    </table>

といった、いかにもな感じの空白行が

      </tr>
    </table>

まるで手術痕の残らないヨみたいな自然なソースになるわけだ。素敵!

ま、ちょっと探したらTemplate Toolkit Manualにも書いてあったので、単にマニュアル読んでないのがばればれなだけなんだけど、、、、

Template Toolkit Manualもちゃんと読んでおくべきか。

で、微妙に本も欲しくなったりするなぁ。

ProductName Perl Template Toolkit
Darren Chamberlain
Oreilly & Associates Inc / 3031円 ( 2004-03 )


とはいうものの、TTに深入りするくらいなら、HTML::Masonみたいなほうが僕にはむしろあっているのかナァと悩んだが、テンプレートはテンプレートの利便さを追求する結果、うっかり高機能化した(しすぎた)だけなんだヨって考えるほうが、MVC的には自然なのかなあと今は考えている(というか自分を納得させている)。