EC-CUBEでよく利用する、Twigのテンプレートタグの備忘録です。順次追記します。
レイアウトの定義
{% extends ‘○○○.twig’ %} 継承
ページのベースになるテンプレートを指定します。
後述する include・block と共に使用します。
<!--
◉使用例①
Eccube/Resource/template/default/default_frame.twig を継承して(ベースにして)ページを構築する
-->
{% extends 'default_frame.twig' %}
<!--
◉使用例②
PluginName/Resource/template/admin/index.twig を継承して(ベースにして)ページを構築する
-->
{% extends 'PluginName/Resource/template/admin/index.twig' %}
<!--
◉使用例③
Eccube/Resource/template/admin/default_frame.twig を継承して(ベースにして)ページを構築する
-->
{% extends '@admin/default_frame.twig' %}
【参考】@admin の定義は ec-cube/app/config/eccube/packages/twig.yaml
https://github.com/EC-CUBE/ec-cube/blob/4.2/app/config/eccube/packages/twig.yaml
{% include ‘○○○.twig’ %} 挿入
現在のテンプレートに別のテンプレートを挿入し読み込みます。
<!--
◉使用例①
Eccube/Resource/template/default/Mypage/navi.twig を挿入する
-->
{% include 'Mypage/navi.twig' %}
<!--
◉使用例②
同階層のpager.twig を挿入し、withでスコープを設定(後述)。
変数 pagination.paginationData を渡します。
-->
{% include "pager.twig" with {'pages': pagination.paginationData} %}
{% block ○○○ %} 〜 {% endblock %} ブロック
○○○ には任意のブロック名を指定可能。
extendsで指定したテンプレートに、別の内容を反映させます。
<!--
◉使用例①
default_frame.twigをベースにして main というブロック内に任意の内容を反映させる。
-->
{% extends 'default_frame.twig' %}
{% block main %}
<!-- 〜任意の内容〜 -->
{% endblock %}
<!--
◉使用例②
そのページ独自の要素を反映させる。
-->
{% block title %} 〜 {% endblock %}
{% block sub_title %} 〜 {% endblock %}
{% block stylesheet %} 〜 {% endblock %}
<!-- 閉じタグにブロック名を記載することも可能。 -->
{% block javascript %} 〜 {% endblock javascript %}
{%- block button_row -%} 〜 {%- endblock button_row -%}
上書き(オーバーライド)について
{% block main %} がある default_frame.twig を、
index.twig が extends(継承)すると、
AAA と BBB はどちらが表示されるか?
→ この場合、上書きされるので BBB が表示される。
{% block main %}
<p>AAA</p>
{% endblock %}
{% extends 'default_frame.twig' %}
{% block main %}
<p>BBB</p>
{% endblock %}
演算子
算術演算子
+: 足し算
{{ 1 + 1 }} <!-- 2 -->
-: 引き算
{{ 3 - 2 }} <!-- 1 -->
*: 乗算(掛け算)
{{ 2 * 2 }} <!-- 4 -->
/: 除算(割り算)
{{ 1 / 2 }} <!-- 0.5 -->
%: 除算の余り
{{ 11 % 7 }} <!-- 4 -->
//: 除算後、四捨五入された整数を返す
{{ 20 // 7 }} <!-- 2 -->
{{ -20 // 7 }} <!-- -3 -->
**: 累乗、(左側に対して右側の数値分)
{{ 2 ** 3 }} <!-- 8 -->
論理演算子
and: AND演算子
or: OR演算子
not: NOT演算子
( ): 式をグループ化
&& や || は使用不可。
比較演算子
使用できる演算子。
==
!=
<
>
>=
<=
使用できないが代用があるもの。
NG:===
OK:is same as()
<!-- 使用例: -->
{% if hoge is same as ('piyo') %}
NG:!==
OK:is not same as()
<!-- ◉使用例 -->
{% if hoge is not same as ('piyo') %}
【参考】Twig Documentation(ver.2) Filters – Operators
https://twig.symfony.com/doc/2.x/templates.html#math
変数・スコープ
{% set %} 変数
set は変数を設定します。
{% set 変数 = 値 %} のように代入し、{{ 変数 }} のように出力します。
例5のように、条件 (三項) 演算子なんかも使用可能です。
<!-- ◉使用例 -->
<!-- 例1: -->
{% set current = 1 %}
<!-- 例2: -->
{% set body_class = 'product_page' %}
<!-- 例3: -->
{% set menus = ['setting', 'shop', 'shop_delivery'] %}
<!-- 例4: -->
{% set shippingNo = loop.index0 %}
<!-- 例5: -->
{% set css_class = 'error' == log.type ? 'error'
: (log.priorityName == 'WARNING' or 'deprecation' == log.type) ? 'warning'
: 'silenced' == log.type ? 'silenced'
%}
{% with %} スコープ
スコープを利用して、変数の影響範囲を指定します。
<!-- set と合わせて利用した例 -->
{% set number = 500 %}
{% with %}
{% set number = 1000 %}
{% set hoge = 9000 %}
<p>出力1:{{ number }} </p> <!-- 出力1:1000 -->
{% endwith %}
<p>出力2:{{ number }}</p> <!-- 出力2:500 -->
<p>出力3:{{ hoge }}</p> <!-- 出力3:スコープ外で使用するとエラーになります -->
フィルター
以下のようにフィルターを利用することで、出力内容のコントロールが可能です。
{{ 値 | フィルター }}
replace 置換
<!-- ◉使用例 -->
{{ "私は %this% の %that% が好きです"|replace({'%this%': フルーツ, '%that%': "オレンジ"}) }}
{{ "私は this の --that-- が好きです"|replace({'this': フルーツ, '--that--': "オレンジ"}) }}
trans 自動翻訳
デフォルトの翻訳リストのディレクトリ:src/Eccube/Resource/locale/
追加/編集先のディレクトリ:app/Customize/Resource/locale/
LOCALEの指定箇所
.env内のECCUBE_LOCALE=ja
<!-- ◉使用例 -->
<!-- template/admin/Product/index.twig 内 -->
{{ 'admin.product.permanently_delete__confirm_message'|trans }}
日本語翻訳ファイル:src/Eccube/Resource/locale/messages.ja.yamel
admin.product.permanently_delete__confirm_message: 商品を削除してよろしいですか?
英語翻訳ファイル:src/Eccube/Resource/locale/messages.en.yamel
admin.product.permanently_delete__confirm_message: Are you sure to delete this product?
nl2br 改行
ファイル内の改行箇所に<br>を挿入します。
<!-- ◉使用例 -->
{{ 'これは
改行
されません' }}
{{ 'これは
改行
されます'| nl2br }}
以下の様に翻訳ファイルの改行も反映されます。
<!-- ◉ trans と nl2br を合わせた使用例 -->
{{ 'product_review.front.review.complete.thanks_detail'|trans|nl2br }}
<!-- 日本語翻訳ファイル:src/Eccube/Resource/locale/messages.ja.yamel -->
product_review.front.review.complete.thanks_detail: |
内容を確認後、反映させていただきます。
今しばらくお待ちくださいませ。
<!-- 出力 -->
内容を確認後、反映させていただきます。
今しばらくお待ちくださいませ。
【参考】
Twig Documentation(ver.2) Filters
https://twig.symfony.com/doc/2.x/filters/index.html
Twig Extensions Defined by Symfony
https://symfony.com/doc/current/reference/twig_reference.html
2 thoughts on “【EC-CUBE4】テンプレートタグ まとめ② (レイアウトの定義、演算子、変数・スコープ、フィルター)”