Рейтинг:0

Установить ['#default_value'] поля ссылки на термин таксономии через hook_form_alter()?

флаг nr

Вот другой вопрос с тем же полем ссылки на термин таксономии, которое я упомянул в мой предыдущий вопрос.

Пользователям с ролями «Администратор» и «Тренер» предоставляется разрешение на регистрацию пользователей «Студент» в пользовательском режиме формы «Добавить студента» (user_add_student_form). Для UX было бы лучше, если бы я мог установить ['#значение по умолчанию'] принадлежащий select_a_school поле ссылки термина таксономии на ту же школу, к которой принадлежит текущий вошедший в систему пользователь.

я работаю с крючок_form_alter() в предварительной обработке шаблона, потому что так его настроил предыдущий разработчик:

/**
 * Реализует hook_form_alter().
 */
функция projectname_form_alter(&$form, &$form_state, $form_id) {
  // Получить текущего пользователя.
  $current_user_proxy = \Drupal::currentUser();
  $current_user_id = $current_user_proxy->id();
  если (!$current_user_proxy->isAnonymous()) {
    $currentUser = Пользователь::load($current_user_id);
    // Получить школу текущего пользователя.
    $currentSchool = $currentUser->field_select_a_school->getValue();
    // Обработка формы добавления студента.
    если ($ form_id == 'user_add_student_form') {
      // Это работает.
      $form['account']['roles']['#access'] = FALSE;
      $form['аккаунт']['роли']['#default_value'] = [
        0 => 'аутентифицированный',
        1 => 'студент',
      ];
      // Это не работает.
      $form['field_select_a_school']['#default_value'] = $currentSchool;
    }

Параметр $form['аккаунт']['роли']['#default_value'] работает, как и ожидалось, но поле ссылки на термин таксономии сопротивляется всем таким попыткам.

Я пробовал следующие варианты:

      $form['field_select_a_school']['#default_value'] = $currentSchool;
      $form['field_select_a_school']['#default_value'][] = $currentSchool;
      $form['field_select_a_school']['widget']['#default_value'] = $currentSchool;
      $form['field_select_a_school']['widget']['#default_value'][] = $currentSchool;
      дамп ($ текущая школа);

Symfony VarDumper свалка() из $currentSchool похоже, что он содержит правильную структуру данных:

^ массив: 1 [∗¼
  0 => массив: 1 [≥
    "target_id" => "916"
  ]
]

Вот, для справки, соответствующий свалка() для целевого поля в $форма:

  "field_select_a_school" => массив: 8 [₽
    "#тип" => "контейнер"
    "#parents" => массив: 1 [â¶]
    "#атрибуты" => массив: 1 [â¶]
    "виджет" => массив: 22 [ ¼
      "#title" => "Выберите школу*"
      "#описание" => ""
      "#field_parents" => []
      "#требуется" => верно
      "#дельта" => 0
      "#вес" => 0
      "#element_validate" => массив: 1 [â¶]
      "#key_column" => "target_id"
      "#тип" => "выбрать"
      "#options" => массив: 47 [◄]
      "#значение_по умолчанию" => []
      "#несколько" => ложь
      "#shs" => массив: 7 [â¶]
      "#атрибуты" => массив: 1 [â¶]
      "#attached" => массив: 1 [â¶]
      "#entity_type" => "пользователь"
      "#комплект" => "пользователь"
      "#after_build" => массив: 1 [▶]
      "#field_name" => "field_select_a_school"
      "#parents" => массив: 1 [â¶]
      "#дерево" => правда
      "#form_id" => "user_add_student_form"
    ]
    "#доступ" => правда
    "#вес" => 22
    "#cache" => массив: 3 [○]
    "#form_id" => "user_add_student_form"
  ]

Что бы я ни пытался, $form['field_select_a_school']['виджет']['#default_value'] всегда заканчивается пустым массивом. ¯\_(ã)_/¯

Что мне здесь не хватает?

флаг cn
Из вашей копии/вставки это `$form['field_select_a_school']['widget']['#default_value'] = $currentSchool[0]['target_id'];` (или `$form['field_select_a_school'][' widget']['#default_value'][] = $currentSchool[0]['target_id'];` если поле с несколькими значениями)
hotwebmatter avatar
флаг nr
Ха, я просто предположил, что мне нужно будет сопоставить всю структуру данных, а не просто передать TID. Я попробую это, спасибо!
hotwebmatter avatar
флаг nr
Хорошая попытка, @Clive, но я добавил `$form['field_select_a_school']['widget']['#default_value'] = $currentSchool[0]['target_id'];` и все еще получаю `"#default_value" => []`.

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

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