Xslateで文字列のマッチ判定
2012/09/19
twitterでxslateでの疑問をつぶやいたところ、作者の @__gfx__ さんに解決方法を教えてもらえましたので、メモしておきます。 https://twitter.com/smeghead/status/247267644623949825
前提
Dancer で xslate を使ってます。
やりたかったこと
テンプレートファイル内で、選択中のページの $request.path を使って、メニュー部分のclass属性に、activeを付けるかどうかを判定したい。 トップページかどうかの判定のように、文字列の完全一致でよければ、$request.path == ‘/’ で済むが /area/静岡 とか動的な部分を含むpathの場合は、正規表現の文字列マッチを使いたい。
解決方法
config.xml で、xslateのmoduleに、Text::Xslate::Bridge::Star を追加指定する
engines: xslate: cache_dir: .xslate_cache/ cache: 1 extension: tx module: - Text::Xslate::Bridge::Star |
Xslateを直で使ってる場合は、コンストラクタで、moduleにText::Xslate::Bridge::Starを指定する。
my $tx = Text::Xslate->new( module => ['Text::Xslate::Bridge::Star'], ); |
テンプレートファイルでは、 “string”.match(rx(‘regexp’) のように使う
<li class="<: if $request.path.match(rx('/area.*')) {'active'} :>"> |
まとめ
xslate いいよ。これに慣れると他のテンプレートエンジン使えなくなるくらい。 @__gfx__ さんありがとうございます。