web-dev-qa-db-ja.com

フォーム要素にテーマ名の提案を提供する方法はありますか?

デフォルトのテーマ/テンプレートに触れずにフォーム要素のマークアップを変更する方法を探しています。ソースコードを確認すると、Drupalはフォーム要素を編集するためのテーマ提案を推奨していないようです。公開されたフィルターの同じフィールドを使用する複数のビューがあります。フォームを編集しようとすると、 element-label.html.twigこれは、同じフィールドを持つすべての要素に影響します。

<!-- THEME DEBUG -->
<!-- THEME HOOK: 'form_element_label' -->
<!-- BEGIN OUTPUT from 'themes/iom/templates/layout/form-element-label.html.twig' -->
<label for="edit-field-themes-target-id" class="label">Themes</label>
<!-- END OUTPUT from 'themes/iom/templates/layout/form-element-label.html.twig' -->
2
clestcruz

2つのフックを実装する必要があるようです。 1つは提案を追加し、もう1つはテンプレートを定義します。 hook_theme_suggestions_HOOK_alter および template_preprocess_form_element (別名hook_preprocess_HOOK)。

/**
 * Implementation of hook_theme_suggestions_form_element_alter().
 */
function MYTHEME_theme_suggestions_form_element_alter(array &$suggestions, array $variables) {
  if (\Drupal::service('path.current')->getPath() == '/user/login') {
    $suggestions[] = $variables['theme_hook_original'] . '--user-login';
  }
}

/**
 * Implementation of hook_preprocess_form_element().
 */
function MYTHEME_preprocess_form_element(&$variables, $hook, &$info) {
  $info['template'] = 'form-element--user-login';
}

ソース: フォーム要素テンプレートの提案は効果がありません

1
leymannx