logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
04/05/2020, by maria

Menu

Twig公式ドキュメントより:「マクロは通常のプログラミング言語の関数に匹敵します。繰り返さないように、頻繁に使用されるHTMLのイディオムを再利用可能な要素に配置するのに役立ちます。」

{% macro input(name, value, type, size) %}
  <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
{% endmacro %}

マクロはネイティブなPHP関数といくつかの点で異なります:

  • 引数のデフォルト値は、マクロ本体のdefaultフィルターを使用して定義されます。
  • マクロの引数は常にオプションです。
  • 追加の位置引数がマクロに渡された場合、それらは値のリストとして特別なvarargs変数に入ります。

ただし、PHP関数と同様に、マクロは現在のテンプレート変数にアクセスできません。特別な_context変数を使用して、コンテキスト全体を引数として渡すことができます。

マクロの呼び出し

From _self

マクロは、それを呼び出すのと同じTwigファイルに配置できます。この場合、_selfコンテキストが使用されます...

{{ _self.input(name, value, type, size) }}

外部ファイルから

ただし、複数のテンプレートでマクロを使用できるように、マクロは別のファイル(例:macros.twig)に配置することをお勧めします。

たとえば、カスタムテーマ「mytheme」では、マクロファイルをここに配置します...

[site_root]/themes/custom/mytheme/templates/macros.twig

注:マクロファイルはany.twigという名前を付けることができますが、html拡張子を持つことはできません(つまり、macros.html.twigは機能しません)。また、ファイルは使用場所に関係なく「templates」ディレクトリに配置する必要があります(つまり、.../mytheme/layoutsに配置したLayout Builderレイアウトの場合、マクロは../mytheme/templatesに存在する必要があります)。

マクロを使用するテンプレートに、このimportステートメントを追加します。

{% import '@mytheme/macros.twig' as myMacros %}

@mythemeはテーマの「templates」ディレクトリを自動的に見つけますが、追加のディレクトリ構造はimportステートメントで定義する必要があります。例:

{% import '@mytheme/foo/bar/macros.twig' as myMacros %}

このドキュメントの古いバージョンでは、ネストされたディレクトリ構造の定義は不要とされていたため、ymmvに注意してください。カスタムモジュールでこれを行う場合は、テーマ名の代わりにモジュール名を使用するだけで同じ手法を使用します(例:@mycustommodule)。

次に、マクロを使用します...

{{ myMacros.input(name, value, type, size) }}

Drupal 8では、マクロはたとえばメインナビゲーションの作成に使用されます(menu.html.twigファイルを参照)。