Labo

EC-CUBE3 分室

【3.0.15】twigのフィルタ機能について(3)

2017年12月17日 / 投稿者名:chiharu


twig テンプレートについてに関して引き続き進めて行きます。
まぁ、twig をあまり掘り下げても仕方ないかもしれません。
フィルター機能に関してはある程度紹介して終わりたいと思います。
 
■エスケープ処理
 非常に良く使うんではないでしょうか。
 定番のエスケープ処理です。

{{ textData|escape }}

 上記が基本的な内容です・
 「textData」の内容についてエスケープ処理を実行してくれます。
 また、引数として以下のようなものもあります。
 引数は必須ではありませんが出力内容が把握できるのであれば設定する方良いかもしれません。

{{ textData|escape('html') }}
{{ textData|escape('html_attr') }}
{{ textData|escape('js') }}
{{ textData|escape('css') }}
{{ textData|escape('url') }}

 ちなみに以下の様にしてもエスケープ処理はしてくれるそうです。

{{ textData|e }}
{{ textData|e('html') }}

 
 
■表示フォーマット
 これもよく使う項目のはずです。
 ただ、Twig 上での使用方法にテキストでフィルターを使用する意味があるんでしょうか。
 なお、このフィルターに関してはデータをフィルターの後に書くようです。

{{ "First Data Is $s. Last Data Is $s."|format(firstText, LastText) }}
{{ "%02d" | format(quantityData) }}

 
 
■表示フォーマット(ナンバーフォーマット)
 これもよく使う項目です。
 ナンバーフォーマットの基本形は以下の内容です。

{{ numData|number_format }}

 細かな設定として引数を設定できます。
 ちなみに引数は以下の内容ですね。
  引数1 : 少数点以下桁数
  引数2 : 小数点区切り文字
  引数3 : 桁区切り文字

{{ 123456.789|number_format(2, '.', ',') }}

 さらに細かな設定としてマイナス表示をする場合には以下のように値をラップ処理をしておく必要があるようです。
 ラップ処理をしておかないと数値の表示に不具合が出るようです。

{{ (-123456.789)|number_format(2, '.', ',') }}

 
 
■文字列の切り取り
 文字列の切り取りを行うのは定番なのかなとも思います。

{{ substrText | slice(0, 2) }}

 同様に文字列の連結も便利なのですがフィルター機能ではありません。
 ・・・折角なので記載しておきますね(笑い)

{{ ' First Text ' ~ ' Middle Text ' ~ ' Last Text ' }}

 
 
■文字列の置換
 簡易的に置換処理が出来ればありがたいです。
 表示内容を置換することは便利ですよね。

{{ dispText | replace({'target': 'Change Text'}) }}

 
 
■文字列の分割
 ちょっとした配列情報をカンマ区切りでテキスト化することがあります。
 それに合わせるとこの機能は良く使うんではないでしょうか。

{% set arrData = commaText|split(',') %}

 上記の方法でカンマ区切りの文字列を配列に分割してくれます。
 以下に記載するフィルター機能の「length」と合わせて使用することが多いのではないでしょうか。
 
 
■配列数の取得
 Symfony の性質上あまり良くは無いのかもしれません。
 しかし、私は横着して良く使ってしまいます。

{{ arrData |length }}

 上記の内容にて配列の内容数が取得できます。
 本来は PHP 側の処理で値を取得しておくべきなんでしょうね(笑)
 
 
 
とりあえず私がよく使うあたりはこんな感じでしょうか。
今までは EC-CUBE2(Smartyテンプレート)のためフィルター機能は非常に有効でした。
ですが、今回の内容を見る限り本当は PHP 側でやらないと Symfony の方針としては間違っているのではないでしょうか。
なんだがモヤッとするところですが便利なものは便利なので良いですね(笑)
 
と云うことで今回は終了とさせて頂きます。

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。