ここでは、Twigの基本的な構文を紹介します。すでにTwigの利用経験がある方は読み飛ばして構いません。
変数の書き方
変数は {{ }}
で囲んで出力します。
{{ title }}
{{ entry.id }}
グローバル変数の書き方
Twigでは、グローバル変数と変数の記法に区別はありません。{{ }}
で囲むことで出力できます。Twig標準の仕様に従います。
<h1>{{ BLOG_NAME }}</h1>
従来の記法では、グローバル変数に校正オプションを適応できませんでしたが、Twigでは変数と同じ記法になるので、グローバル変数に校正オプションも同様に適応できるようになります。
{{ NOW_DATE|date('Y年m月d日') }}
変数を定義する
Twig内では、テンプレート内で新しく変数を定義することができます。
変数定義には set
タグ を使用します。計算結果や文字列の組み立て、繰り返し処理での一時的な値の保持などに便利です。
従来記法の SetTemplate
や SetRendered
に近い概念ですが、Twigでは定義した値を変数として直接利用できる点が異なります。従来テンプレートには同等の機能はありません(Twig標準の仕様に準拠)。
{% set greeting = "こんにちは" %}
{% set name = "山田" %}
<p>{{ greeting }}, {{ name }}さん!</p>
文字列の連結
Twigでは、~
(チルダ) 演算子を使って文字列を結合できます。
これは、PHPの .
演算子やJavaScriptの +
演算子に相当し、文字列と変数を簡単に組み合わせることができます。
{% set title = "今日の天気" %}
{% set weather = "晴れ" %}
<p>{{ title }} は {{ weather }}です。</p>
<p>{{ title ~ "は" ~ weather ~ "です。" }}</p> <!-- 連結して出力 -->
if文の書き方
Twigでは「ifタグ」を使用して記述します。(Twig標準の仕様に従います)
{% if SESSION_USER_AUTH %}
<p>
ログイン中です
</p>
{% endif %}
条件式の記述例
比較演算子
==(等しい)
!=(等しくない)
>(大きい)
<(小さい)
>=(以上)
<=(以下)
{% set age = 18 %}
{% if age >= 18 %}
<p>成人です。</p>
{% else %}
<p>未成年です</p>
{% endif %}
論理演算子
{% set isLogin = true %}
{% set isAdmin = true %}
{% if isLogin and isAdmin %}
<p>ログイン済みの管理者です。</p>
{% endif %}
{% if not isLogin %}
<p>ログインしてください。</p>
{% endif %}
is 演算子
{% set name = '山田' %}
{% set list = [] %}
{% set number = 6 %}
{% if name is defined %}
<p>名前: {{ name }}</p>
{% endif %}
{% if list is empty %}
<p>リストは空です。</p>
{% endif %}
{% if number is even %}
<p>
{{ number }}は偶数です。
</p>
{% endif %}
{% if number is divisible by(2) %}
<p>{{ number }}は2で割り切れます。</p>
{% elseif number is divisible by(3) %}
<p>{{ number }}は3で割り切れます。</p>
{% else %}
<p>{{ number }}は2でも3でも割り切れません。</p>
{% endif %}
in 演算子
{% set colors = ["red", "blue", "green"] %}
{% if "blue" in colors %}
<p>青色が含まれています。</p>
{% endif %}
他のプログラミング言語と同様に、括弧を使って条件式の優先度を制御できます。
ループ処理
Twigでのループの書き方はとてもシンプルです。「forタグ」を使って、配列やリストを簡単にループ処理できます。基本的な構文は以下の通りです。(Twig標準の仕様に従います)
{% set fruits = ['Apple', 'Banana', 'Cherry'] %}
<ul>
{% for fruit in fruits %}
<li>{{ fruit }}</li>
{% endfor %}
</ul>
モジュールで取得したデータをループする例
{% set entrySummary = module('V2_Entry_Summary') %}
<ul>
{% for entry in entrySummary.entries %}
<li>{{ entry.title }}</li>
{% endfor %}
</ul>
インデックスの取得
「loop」という特殊な変数を使用して、ループのインデックスやその他の情報を取得できます。loop.index
で1から始まるインデックスを取得したり、loop.index0
で0から始まるインデックスを取得できます。
<ul>
{% for entry in entrySummary.entries %}
<li>{{ loop.index }}: {{ entry.title }}</li>
{% endfor %}
</ul>
その他のloopオプション
loop.first:ループの最初の要素の場合にtrueを返す
loop.last:ループの最後の要素の場合にtrueを返す
loop.revindex:残りの要素数(1からカウント)
loop.revindex0:残りの要素数(0からカウント)
「loop.first」や「loop.last」を使用することで、従来の <!-- BEGIN glue -->
の代替ができます。
{% for entry in entrySummary.entries %}
{{ entry.title }}
{% if not loop.last %} | {% endif %}
{% endfor %}