web-dev-qa-db-ja.com

部分テンプレートを含める

私はDrupal 8をカスタムテーマで使用しようとしています。要件に大きな構造の違いがあるため、ページを持っています。front.twig.htmlとpage.twig.htmlです。は、通常のSymfony2プロジェクトのphrozn oderで使用されているテンプレートパーツ(footer.html.twigやheader.html.twigなど)を作成します。これらのテンプレートは、サブディレクトリ/ parts /に保存されます。

しかし、このテンプレートを通常どおり呼び出すと、テンプレートの名前を含む文字列を受け取るだけです。

例えば:

{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 

ファイル名を文字列として返します。

parts/footer.html.twig

Drupal 8?

21
felipep

相対パスを実行することはできません。すべてのパスはDrupalルートからであるか、 'templates'ディレクトリへの名前空間パスに基づいている必要があります: https://www.drupal .org/node/2143557

「Drupalルートから)」を避け、少なくとも https://www.drupal.org/node/2291449 が解決されるまで名前空間を使用します。

{% include '@mytheme/parts/footer.html.twig' %}

編集:追加の引数をループに渡す場合、またはインクルードされたtwigテンプレートにいくつかの変数をチェックする場合は、次のように記述する必要があります。

{% include '@mytheme/includes/form-block.html.twig' with {dog: true} %}

編集: https://www.drupal.org/node/2291449 がコミットされたので、次のこともできます:

{% include 'footer.html.twig' %}

有用な例外ではなく文字列としてファイル名を表示した理由については、 https://www.drupal.org/node/2369981 を参照してください。

35
Cottser

テーマディレクトリへのフルパスを使用してください。名前空間を使用する場合、コードを別のサイトまたはテーマに持ってくると、名前空間を変更する必要があります。

これはうまくいくはずです:

{% include directory ~ '/templates/parts/footer.html.twig' %}
16
André

withキーワードの後に​​変数を渡すことができます:

{# template.html will have access to the variables from the current context and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}

{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}

Twigドキュメンテーション http://twig.sensiolabs.org/doc/tags/include.html を参照してください

6

Twigの配列を使用して、ファイルが存在しない場合にフォールバックを作成することもできます。

例えば。 footer.html.twigが使用できない場合、defaultfooter.html.twigが使用されます。

{{ include([
  '@yourthemename/parts/footer.html.twig',
  '@yourthemename/parts/defaultfooter.html.twig'
]) }}

Nb:これがベストプラクティスであるかどうか、私はまだ解決しようとしています。

5
granticusiv
4
Yusef

Drupal 8の場合

twigファイルを含めるを含む場合{% include 'FILE_NAME.html.twig' %} Drupalは、FILEが現在のテーマディレクトリにあることを期待しています。そこに置くだけで機能します。

twigファイルを含める

MODULEに追加する場合は、THEME関数で宣言する必要があります。 .moduleファイルに次の行を追加するだけです。

<?php function YOUR_MODULE_NAME_theme($existing, $type, $theme, $path) {   
   'FILE_NAME' => [
      'variables' => [
      ],
      'template' => 'FILE_NAME',
    ], ?>

次に、TwigファイルをYOUR_MODULE/template/FILE_NAME.html.twigに配置します

1
Karim Rachadi