2013-03-24 15 views
13

に私はアイテムが0x0120はそのように見えるか、この0x0120D52000D430D2B0D8DD6F4BBB16123680E4F787006540​​36413B65C740B168E780DA0FB4BXのような、より複雑になる可能性がある特定の値では小枝テンプレート

{% if item.ContentTypeId == '0x0120' %} 
    <td><a href='?parentId={{ item.Id }}'>{{ item.BaseName }}</a><br /></td> 
{% else %} 
    <td><a href='?{{ item.UrlPrefix }}'>{{ item.LinkFilename }}</a></td> 
{% endif %} 

を開始しますかどうかをテストしたいと思います小枝のテンプレートを持っている「で始まります」。私がしたいのは、それが0x0120で始まることを保証することだけです。

理想的な解決策は正規表現を使ってこれを解決することですが、私はTwigがこれをサポートしているかどうか分かりません。

ありがとうございました

答えて

18

はい、小枝は比較で正規表現をサポートしています。あなたの場合http://twig.sensiolabs.org/doc/templates.html#comparisons

それは次のようになります。

{% if item.ContentTypeId matches '/^0x0120.*/' %} 
    ... 
{% else %} 
    ... 
{% endif %} 
+0

クール!正規表現と一致するすべての配列要素をフェッチする方法はありますか? witout {配列%の要素に対する%} ?? – juanmf

+6

これは間違っています。これは ''/^0x0120。* /''またはそれに類するものでなければなりません。文字列はPHPの 'preg_match'に直接渡されます。これは余分な区切り文字を必要とします。 – Timwi

+0

'starts with'を使うことができます。下記の答えを参照してください。 – benske

1

いつでも必要な比較を実行する独自のフィルタを作成できます。 docs 1として

小枝によって呼び出されると、PHPの呼び出し可能なフィルターの左側を受け取る(パイプの前に|)は、最初の引数とフィルタに渡される追加の引数として(内括弧())を追加引数として使用します。

ここに変更例があります。フィルタの作成

が 呼び出し可能なPHPで名前を関連付けるのと同じくらい簡単です:

// an anonymous function 
$filter = new Twig_SimpleFilter('compareBeginning', function ($longString, $startsWith) { 
    /* do your work here */ 
}); 

次に、あなたの小枝環境にフィルタを追加します。

$twig = new Twig_Environment($loader); 
$twig->addFilter($filter); 

さらにここでは、テンプレートでそれを使用する方法である:

{% if item.ContentTypeId | compareBeginning('0x0120') == true %} 
{# not sure of the precedence of | and == above, may need parentheses #} 

私はPHPの男ではないので、私はPHPの正規表現を行う方法を知りませんが、$longString場合は、上記の無名関数がtrueを返すように設計されて$startsWithで始まります。私はそれを実現するのが簡単であると確信しています。

6

sliceフィルタを使用できます。単純に実行します。

{% if item.ContentTypeId[:6] == '0x0120' %} 
{% endif %} 
66

あなたは今、小枝に直接それを行うことができます。

{% if 'World' starts with 'F' %} 
{% endif %} 

「終了」もサポートされています。

{% if 'Hello' ends with 'n' %} 
{% endif %} 

その他の便利なキーワードも存在します。

複雑な文字列の比較:

{% if phone matches '{^[\\d\\.]+$}' %} {% endif %} 

(注:二重のバックスラッシュは小枝ずつ、バックスラッシュに変換されます)

文字列内容:

{{ 'cd' in 'abcde' }} 
{{ 1 in [1, 2, 3] }} 

詳細はこちらhttp://twig.sensiolabs.org/doc/templates.html#comparisons

関連する問題