Рейтинг:1

How do I add a template suggestion for form input fields that have containers?

флаг in

I've been able to successfully add the parent form ID to all form elements, based on these two questions: How can we find the id of the parent form in preprocess_HOOK() or HOOK_alter() theme functions? and Add the Form name to the theme suggestions input field.

However, the two elements I really need template suggestions for are inputs that have containers... therefore the parent form ID is added to the containers, not the inputs, and when I add the template suggestions the variable is blank (obviously).

I see there are modules like Formdazzle! which makes this easy, but I feel like I'm close - however I'm struggling to 'reach' the children (the inputs) of the form elements (the containers).

This is my current code:

 * Implements hook_form_alter().
 */
function HOOK_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  foreach (\Drupal\Core\Render\Element::children($form) as $key) {
    if ($form[$key]['#parents']) {
      $form[$key]['#attributes']['data-parent-form'] = $form['#id'];
    } else {
      // help!
    }
  }
}

/**
 * Implements hook_theme_suggestions_input_alter().
 */
function HOOK_theme_suggestions_input_alter(&$suggestions, array $variables) {
  $element = $variables['element'];
  $suggestions[] = 'input__' . $element['#type'] . '__' . $element['#attributes']['data-parent-form'];
}
leymannx avatar
флаг ne
Вы можете предварительно обработать контейнеры, проверяющие ваш ввод, и, если вы их найдете, назначить переменную для ввода оттуда. Позже к этой переменной можно будет получить доступ в переменных хука предложения.
флаг in
@leymannx Я изучил это и в итоге остановился на Formdazzle - я пытался заново изобрести колесо, и в конце концов мне нужно было сэкономить время (и я беспокоился, что в будущем не будет описана другая ситуация). Однако это определенно способ продолжить.
leymannx avatar
флаг ne
Да, [Formdazzle] (https://www.drupal.org/project/formdazzle) всегда хорош для тематики форм. Возможно, добавьте это как ответ ниже!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.