{{ 値 | trans }}
や{{ 値 | nl2br }}
ってどういう意味? どうやって使う?
本記事では、Twigテンプレートでよく使われる「フィルター」と呼ばれる機能について纏めています。
EC-CUBE 4で用意されているTwigファイルを元に説明しているので、実際にコードを弄りながら見てみると理解が早いかもしれません。
なお、Twigについては以下記事でも纏めていますので、合わせてご覧ください。
フィルターとは?
{{ 値 | フィルター }}
このように記述することで、「|」の前にある値に特定のフィルター処理を適用し、表示できるようになります。
用意されているフィルターには多くの種類がありますが、ここではEC-CUBEでよく見かけるものをピックアップしました。
trans
trans
は、自動翻訳してくれるフィルターです。
EC-CUBEでは、デフォルトでいくつかのワードに対して日本語表示・英語表示が登録されており、LOCALE(ロケール)によって表示を切り替えることができます。
ワード | 日本語 (messages.ja.yaml) | 英語 (messages.en.yaml) |
---|---|---|
common.select | 選択してください | Please select |
common.select__pref | 都道府県を選択 | Select prefecture |
common.select__unspecified | 指定なし | Unspecified |
common.select__all_products | 全ての商品 | All Products |
common.required | 必須 | Required |
- デフォルトのLOCALEは「ja」(日本語)になっています。
- 翻訳ワードリストは、「src/Eccube/Resource/locale」ディレクトリにある「messages.ja.yaml」と「messages.en.yaml」ファイルで確認できます。
- ワードの追加や修正は、「app/Customize/Resource/locale」下にファイルをコピーして編集します。
ルートディレクト直下の「.env」ファイルを開き、35~40行目付近にあるECCUBE_LOCALE=ja
をECCUBE_LOCALE=en
に変更すると、英語翻訳(messages.en.yaml)が適用されるようになります。
使用例
EC-CUBEの管理画面より新しくページを作成し、実際にtrans
フィルターを使ってみました。
{% extends 'default_frame.twig' %}
{% block main %}
<h1>【フィルターの使用方法】</h1>
<h2>trans の例</h2>
<p>{{ 'common.select' | trans }}</p>
<p>{{ 'common.select__pref' | trans }}</p>
{% endblock %}
localeはデフォルトのまま(ja)になっているため、以下のように表示されます。

common.select
→ 選択してくださいcommon.select__pref
→ 都道府県を選択
というように、ちゃんと翻訳されていますね。
nl2br
nl2br
は、自動で改行(<br>
タグ)を入れてくれるフィルターです。
通常、エンターキーで文字列を改行しても表示には反映されませんが、このフィルター適用下では改行した部分に<br>
タグが挿入されるようになります。
使用例
EC-CUBEの管理画面より新しくページを作成し、実際にnl2br
フィルターを使ってみました。
{% extends 'default_frame.twig' %}
{% block main %}
<h1>【フィルターの使用方法】</h1>
<h2>nl2br の例</h2>
<p>{{ 'おはようございます。
こんにちは。
こんばんは。'}}</p>
<p>{{ 'おはようございます。
こんにちは。
こんばんは。'| nl2br }}</p>
{% endblock %}
- 上段の
<p>
タグは、フィルターを使わずにエンターキーで改行を入れたのみ。 - 下段の
<p>
タグは、nl2br
フィルターを適用。

並べて書いたので少しわかりにくいですが、上の一行(おはようございます。こんにちは。こんばんは。)は改行なしで表示されているのに対し、下は改行されて三行になっていますね。
escape & raw
escape
は自動でエスケープ処理を行い、raw
は自動でエスケープ処理をしないフィルターです。
マークアップ言語やプログラミング言語等で文字列を使うとき、その言語にとって特別な意味を持つ文字や記号を、別の文字列に置き換えることを、エスケープ処理といいます。
具体的には、以下の使用例を見るとわかりやすいと思います。
使用例
EC-CUBEの管理画面より新しくページを作成し、実際にescape
&raw
フィルターを使ってみました。
{% extends 'default_frame.twig' %}
{% block main %}
<h1>【フィルターの使用方法】</h1>
<h2>escape の例</h2>
<p>{{ '<b>HELLO</b>' }}</p>
<p>{{ '<b>HELLO</b>' | escape }}</p>
<h2>raw の例</h2>
{% set example = '<b>HELLO</b>' %}
<p>{{ example }}</p>
<p>{{ example | raw }}</p>
{% endblock %}
escape
フィルターの使用例- 文字列
"HELLO"
を太字にする<b>
タグで囲み、escape
する場合としない場合で表示
- 文字列
raw
フィルターの使用例{% set %}
で変数example
に文字列"<b>HELLO</b>"
を代入し、それをraw
する場合としない場合で表示
{% set %} については こちらの記事 で解説しています。

escape
フィルターを使用した場合、<b></b>
はタグと認識されず、そのまま文字列として表示されます。raw
フィルターの使用した場合、逆に<b></b>
はタグと認識されます。
price
price
は、数値の前に¥マークを追加し、3桁ごとにカンマを挿入するフィルターです。
使用例
EC-CUBEの管理画面より新しくページを作成し、実際にprice
フィルターを使ってみました。
{% extends 'default_frame.twig' %}
{% block main %}
<h1>【フィルターの使用方法】</h1>
<h2>price の例</h2>
<p>{{ 1000 }}</p>
<p>{{ 1000 | price }}</p>
{% endblock %}
数値1000
を、price
フィルターを使用する場合としない場合で比較します。

フィルターを使用した場合、数字の前に「¥」が追加され、3桁目と4桁目の間にカンマが挿入されていますね。
まとめと応用
以上、EC-CUBEでよく使われるものを例に、フィルターの使い方について紹介しました。
ここで紹介した以外にも、文字列を大文字にするupper
や小文字にするlower
、最初の文字だけを大文字にするcapitalize
など、たくさんのフィルターが存在します。興味のある方は、ぜひ調べて使ってみてください!
オリジナルフィルターを作成する
Twig Extensionという機能を使えば、自分で好きなフィルターを作成することもできます。
詳細は以下記事で解説しているので、興味のある方は本記事と合わせてご覧ください。

