web-dev-qa-db-ja.com

カスタムコンテンツタイプのテンプレート

equipmentというコンテンツタイプを作成するモジュールを作成しました。これには、複数のフィールドとフィールドコレクションが含まれます。しかし、私はそれらのフィールドでテンプレートをスタイルしたいと思います。 TwigデバッグのおかげでHTMLコメントから示唆されたように、node--equipment.html.twigと呼ばれるファイルを作成しましたテンプレートモジュールのフォルダです。残念ながらこのテンプレートは表示されないため、デフォルトのテンプレートが表示されます。

Drupal 8はTwigファイルを認識しませんか?必要なテンプレートが表示されない理由は何ですか?これを修正するにはどうすればよいですか?

2
adiii4

モジュールの提案を認識するためには、モジュールのhook_theme()でそれを明示的に指定する必要があります。

system_theme()たとえば、次のようになります。

// Normally theme suggestion templates are only picked up when they are in
// themes. We explicitly define theme suggestions here so that the block
// templates in core/modules/system/templates are picked up.
'block__system_branding_block' => array(
  'render element' => 'elements',
  'base hook' => 'block',
),

元の定義をコピーしてから、キーを変更し、ベースフックを設定します。

4
Berdir

ようやく問題を修正しました。 Berdirが言ったように、テンプレートを認識するためには、モジュールのhook_theme()実装で提案を明示的に指定する必要があります。私のhook_theme()は次のようになります:

function equipment_theme(array $variables) {
  $theme = array();

  # Suggestion for the template
  $theme['node__equipment'] = array(
      'render element' => 'content',
      'base hook' => 'node',
      # template file
      'template' => 'node--equipment',
      # location of the template file
     'path' => drupal_get_path('module', 'equipment') . '/templates',
  );

  return $theme;
}
3
adiii4