Twig は、PHP で使える高速で最適化されたテンプレートエンジンです。開発者とデザイナーの両方がより簡単にテンプレートを作成できるように、設計されています。
その理解しやすい構文と簡単な処理により、Smarty、Django、Jinja、Liquid、または Stencil などに慣れている人であれば、自然に使用することができます。
柔軟性とセキュリティが考慮されており、また、PHP のテンプレートエンジンの中で最も高速であることから、Grav で使用することを選択するのは当然のことでした。
Twig はテンプレートをプレーンな PHP にコンパイルします。これにより、PHP のオーバーヘッドを最小限に抑え、より速く、より合理的な開発が行えます。
また、lexer (字句解析) と parser(構文解析) のおかげで、非常に柔軟なエンジンになっています。これによって、開発者は独自のタグやフィルタを作成することができます。Twig の lexer とpaser は、domain-specific language (DSL) を作成することも可能です。
セキュリティに関しも、Twig は手を抜きません。開発者にサンドボックスモードを与え、信頼されていないコードを調べることができます。これにより、Twig をアプリケーションのテンプレート言語として使いながら、ユーザがテンプレートのデザインを変更する能力を与えることができます。
Twig は、ユーザーインターフェイスをコントロールするための強力なエンジンです。設定のための YAML と組み合わせると、どんな開発者やサイト管理者にとってもパワフルでシンプルなシステムになります。
Twig は、テンプレート設計から面倒をを取り除くことで機能します。テンプレートは基本的に、解析・出力されるときに変換される、変数や 関数含む単なるテキストファイルです。
Tags もテンプレートの重要な要素です。タグはテンプレートのロジックを制御します。
Twig には 2 つの主要な言語仕様があります。
{{ }}
変数や関数の値を表示します。{% %}
ロジックを制御します。Twig を使って作成した基本的なテンプレートを紹介します。
<!DOCTYPE html>
<html>
<head>
<title>All About Cookies</title>
</head>
<body>
My name is {{ name|e }} and I love cookies.
My favorite flavors of cookies are:
<ul>
{% for cookie in cookies %}
<li>{{ cookie.flavor|e }}</li>
{% endfor %}
</ul>
<h1>Cookies are the best!</h1>
</body>
</html>
この例では、サイトのタイトルを設定しました。違うのは、簡単な Twig 構文を使って、作者の名前を表示し、アイテムの種類の動的なリストを作成していることです。
テンプレートはまずロードされ、lexer レキサに渡され、そこでソースコードがトークン化されて小さな断片に分割されます。この時点で、parser がトークンを受け取り、ツリー構造データに変換します。
そして、コンパイラはこれを PHP コードに変換し、変換されてユーザーに表示されるようにします。
Twig はまた、タグ、フィルタ、テスト、演算子、グローバル変数、関数を追加・拡張することができます。Twig の拡張に関するより詳細な情報は、公式ドキュメントで見ることができます。
Twig テンプレートは、あなたが何をしたいのかを理解するために、いくつかの重要なコンポーネントを持っています。これらはタグ、フィルタ、関数、変数を含みます。
これらの重要なツールを詳しく見て、それらがどのように素晴らしいテンプレートを作るのに役立つかを見てみましょう。
Tags tell Twig what it needs to do. It allows you to set which code Twig should handle, and which code it should ignore during evaluation.
タグは Twig に何をする必要があるかを教えます。これによって、Twig は、どのコードを処理すべきか、また解析中にどのコードを無視すべきかを設定することができます。
タグにはいくつかの種類があり、それぞれに固有の構文があり、区別されています。
コメントタグ ({# Insert Comment Here #}
) は、Twig テンプレートファイル内に存在しますが、エンドユーザには実際に表示されないコメントを書くために使用されます。これらは解析中に削除され、パースも出力もされません。
このタグの良い使い道は、特定のコードやコマンドの行を、チームの他の開発者やデザイナーが読んで理解できるように説明することです。
以下は、コメントタグの例です。
{# Chocolate Chip Cookies are great! Don't tell anyone! #}
出力タグ ({{ Insert Output Here }}
) は解析され、生成された出力に追加されます。ここに、フロントエンドや他の生成されたコンテンツに表示させたいものを入れます。
以下は、出力タグの例です。
My name is {{ name|e }} and I love cookies.
変数 name
は Jake
として挿入され、エンドユーザーには My name is Jake and I love cookies.
と表示されます。
XSS 攻撃からサイトを守るためには、システム設定 から autoescape
を有効にするか、テンプレートファイル内のすべての変数を|e|フィルターでエスケープすることが非常に重要です。安全な HTML コンテンツには、|raw
フィルターを使用してください。
アクションタグは、変数の設定、配列のループ処理、条件分岐などの処理を行います。for
や if
文は、これらのタグを使用して作成します。
Twig テンプレートでアクションタグがどのように見えるかを示します。
{% set hour = now | date("G") %}
{% if hour >= 9 and hour < 17 %}
<p>Time for cookies!</p>
{% else %}
<p>Time to bake more cookies!</p>
{% endif %}
最初のアクションタグは、現在の時間を変数に設定します。その値が、午前9時から午後5時までの間にあるかを判断します。そうであるならば、Time for cookies!
が表示されます。そうでない場合は、Time to bake more cookies!
が表示されます。
タグは入れ子にしないことは非常に重要です。出力タグをアクションタグの中に入れれません、その逆も然りです。
出力タグを使用して、思い通りにフォーマットされていない可能性のあるデータを表示する場合には、フィルタが便利です。
例えば、name
変数の値に不要な SGML/XML タグが含まれている可能性があるとしよう。以下のコードを使って、それらをフィルタリングすることができます。
{{ name|striptags|e }}
関数はコンテンツの生成に利用できます。通常、関数には引数が含まれ、引数は関数呼び出しの直後の括弧の中に表示されます。引数がない場合でも、関数の直後には ()
括弧を付けます。
{% if date(cookie.created_at) < date('-2days') %}
{# Eat it! #}
{% endif %}
オリジナル : https://learn.getgrav.org/17/themes/twig-primer