Xslateで文字列のマッチ判定

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\__ さんありがとうございます。

コメントする

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。