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】テンプレートタグ まとめ② (レイアウトの定義、演算子、変数・スコープ、フィルター)

コメントを残す

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