web-dev-qa-db-ja.com

カスタムブロックタイプテンプレートの命名規則はありますか?

カスタムブロックタイプを作成し、Drupal 8に手動で追加フィールドを追加する機能により、追加フィールドのレイアウトを処理するためにブロックを作成する簡単な命名規則--custom_block_type.html.twigがありますか?

例:コンテンツタイプにテーマフックの提案を使用する:node--content_type.html.twig

カスタムブロックタイプは、モジュールルートを経由せずにこの方法で処理できますか?

4
webhorse

モジュールまたはテーマでこれを行う1つの方法を次に示します。

function MYMODULEORTHEME_theme_suggestions_block_alter(&$suggestions, $variables) {
  $content = $variables['elements']['content'];
  if (isset($content['#block_content']) && $content['#block_content'] instanceof \Drupal\block_content\BlockContentInterface) {
    $suggestions[] = 'block__' . $content['#block_content']->bundle();
  }
}

次のようなテンプレート提案の結果:

block--custom-block-type.html.twig

instanceofは慎重すぎるかもしれません。

11
Cottser

このページでは、drupal 8の命名規則の非常に優れた概要を、カスタムブロックについても示します。

Drupal 8-テンプレートの命名規則

このページはブロックテンプレートについて述べています:

たとえば、「block--block--1.html.twig」は、IDが1のブロックモジュールによって作成されたため、ブロック管理画面から追加された最初のユーザー送信ブロックに使用されます。テンプレートはDrupal 8では使用できません。

「custom」というカスタムモジュールによって作成されたブロックと「my-block」のデルタがある場合、テーマフックの提案は「block--custom--my-block.html.twig」と呼ばれます。

また、ビューのもう1つの例として、ビュー名が「front_news」で、表示IDが「block_1」のビューによって作成されたブロックがある場合、テーマフックの提案は次のようになります。block--views-block--front-news-block- 1.html.twig(表示IDまたはビュー名にアンダースコアがある場合-単一のダッシュに変換する必要があることに注意してください)

このコンテキストでは、モジュール名は大文字と小文字が区別されることに注意してください。たとえば、モジュールが「MyModule」と呼ばれる場合、このモジュールの最も一般的なテーマフックの提案は「block--MyModule.html.twig」です。

お役に立てば幸いです。ごきげんよう。

2

@ Cottserの回答は機能しますarray_spliceを使用して正しい特定性を維持するように変更しました。そうしないと、バンドルタイプテンプレートがブロックインスタンスの提案よりも後でチェーンに適用されます。

$suggestion = 'block__' . $content['#block_content']->bundle();
array_splice( $suggestions, 2, 0, $suggestion );

すべてのエンティティのコアでこれを修正する問題があります

https://www.drupal.org/node/227088

1
Esclapes

希望どおりではありませんが、はい、注意深く見つめる必要があります。

*デバッグモードがオンになっていることを確認してください。オンにするには here を参照してください。

私の場合、「カスタムブロックタイプ」を作成しました

次に、このブロックタイプの2つのブロックを作成しました(確認するだけです)。それらをリージョンに割り当てました。次に、ブロックのいずれかを検査します。あなたは添付画像ではっきりと見ることができます、両方のブロックに共通のテンプレートの提案があります(赤でマークされています)。

enter image description here

0
echo