キエミの答えにいくらか基づいて、あなたはこの程度の何かに行くことができます:
<?php
/**
* Implements hook_theme_suggestions_container_alter().
*/
function yourtheme_theme_suggestions_container_alter(array &$suggestions, array $variables) {
$pieces = [
$variables['element']['#type'],
$variables['element']['#name'],
$variables['element']['#display_id'],
];
$suggestions[] = 'container__' . implode('_', $pieces);
}
これにより、たとえばcontainer--view-articles-featured.html.twig
の提案が生成されます
もちろん、それが本当のDrupalテンプレート提案標準に従うようにしたい場合は、さまざまなレベルの具体性を持ついくつかの提案を追加する必要があります。
function MYTHEME_theme_suggestions_container_alter(array &$suggestions, array $variables) {
$suggestions[] = 'container__';
}
このようなものをテーマに入れることができます。同じことをしようとしていますが、変数を取得する方法がわかりません...
Template Suggest モジュールにコンテナテンプレートの提案が含まれるようになりました。ビューに提供されるものの例:
FILE NAME SUGGESTIONS:
* container--view--case-study--page-listing.html.twig
* container--view--case-study.html.twig
x container--view.html.twig
* container--no-parent.html.twig
* container.html.twig
送信ボタンの元のポストユースケースの場合、送信ボタンの周りの一般的なコンテナが提供するものは次のとおりです。
FILE NAME SUGGESTIONS:
* container--actions.html.twig
* container--has-parent.html.twig
x container.html.twig
そのため、送信ボタンを含むすべてのアクションを含むコンテナを、container--actions.html.twig
テンプレートを使用して簡単にターゲティングできます。 (または、container--has-parent.html.twig
を含むすべてのフォームコンテナ。)
ただし、目標が本当に1つの特定の送信ボタンのコンテナーをターゲットにすることであり、他の送信ボタンではない場合、かなり難しくなります。問題は、フォームのIDも、モジュールが提供するテンプレートの提案よりも正確ではないことです(たとえば、このコアフォームには、IDとしてedit-actions
があり、提案を取得するWebフォームcontainer--webform-actions.html.twig
は単にIDを取得しますedit-actions
!)
1つのアプローチは、container--actions.html.twig
をオーバーライドしてdivなどを削除し、必要に応じてinput--submit.html.twig
テンプレート(コアが提供する提案)でそれらを再現することです。ただし、コンテナには複数の入力ボタンを含めることができるため、これは危険です。
これらのボタン自体の情報は本来一意ではないため(たとえば、コア管理フォームではedit-submit
のID、Webフォームではedit-actions-submit
のID)、可能なテンプレートの提案やアプローチをさらに掘り下げることは控えます元のポスター(または他の利害関係者!)が彼らの意図を正確に明らかにできるまで。
モジュールが使用するコードは、もともと 関連する投稿でのKevinの回答 に基づいています。
function twigsuggest_theme_suggestions_container_alter(array &$suggestions, array $variables)
{
$element = $variables['element'];
// We cannot count on template_preprocess_container having run, so we copy
// its logic here to provide templates for forms (has parents) or not forms.
// Special handling for form elements.
if (isset($element['#array_parents'])) {
$suggestions[] = 'container__has_parent';
}
else {
$suggestions[] = 'container__no_parent';
}
if (isset($element['#type']) && $element['#type'] != 'container') {
$suggestions[] = 'container__' . $element['#type'];
}
if (isset($element['#type']) && $element['#type'] == 'container' && isset($element['children']['#type'])) {
$suggestions[] = 'container__' . $element['children']['#type'];
}
}