Drupal7: связать выбранное поле в реальном времени с текстовым полем в Drupal7

Я создаю веб-форму для создания формы подписки на Drupal 7.65.

Цель

Что мне нужно сделать, так это: выбрать роль из списка и автоматически отобразить связанное имя этой роли в текстовом поле. Как я уже сказал, имя должно отображаться в нередактируемом текстовом поле прямо под ним.

Допустим, действительный следующий список (key => value)

Поле: отделение

  • business_manager|Бизнес-менеджер
  • hr_consultant|Отдел кадров
  • training_developer|Разработчик тренингов

и с тех пор соответствующие имена соответственно

Параметры могут отображаться в текстовом поле hr_business_partner

  • Стив Эбк
  • Гертруда Деф
  • Свен Хгдж Клм

Таким образом, когда стажер выбирает «Человеческие ресурсы», имя «Гертруда Деф» должно появиться в текстовом поле под выбранным. Я прикрепил макет, чтобы лучше понять, что мне нужно.

Drupal7: связать выбранное поле в реальном времени с текстовым полем в Drupal7

ВАЖНЫЙ Я не могу поместить имена в список как значение, потому что ассоциация может меняться, но старые записи должны сохранять ранее зарегистрированные ассоциации.

проверить модуль условного поля drupal.org/project/conditional_fields

Fky 10.04.2019 11:10

используйте атрибуты, такие как «данные-человек», для каждой опции и выберите значение атрибута при изменении поля отдела в javascript/jquery. обратитесь к stackoverflow.com/questions/8345666/…, например

Viswanath Polaki 25.04.2019 11:20

В дополнение к этому вы можете использовать модуль drupal.org/project/form_options_attributes для создания вашей формы.

Viswanath Polaki 25.04.2019 11:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать hook_form_alter() и добавить новое поле выбора со списком парных значений ключа, который вам нужен в веб-форме. А затем используйте javascript, чтобы обновить, какое значение поля отображается в поле HR Business Partner при изменении, которое, кстати, также необходимо добавить через ваш hook_form_alter. Вы можете использовать таксономию для ведения списка отделов/деловых партнеров, который будет заполнять ваш отдел и деловых партнеров.

Напишите какой-нибудь javascript для динамического обновления ваших исходных полей, не добавленных через form_alter, при изменении. Я бы предложил создать два текстовых поля в компонентах вашей веб-формы, которые будут содержать значение из вашей формы, изменяющее добавленные поля. Чтобы эти значения, выбранные пользователем, сохранялись в вашей форме.

function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "webform_client_form_####"){
        $form['#attached']['js'] = array(drupal_get_path('module','MODULENAME') . '/js/webform.js');
        $form['hr_dept'] = array(
            "#type" => "select",
            "#options" => array("business_manager"=>"Business Manager", "hr_consultant"=>"Human Resources"),
        );
        $partners = taxonomy_get_tree(#); //the VID of the taxonomy

        $list = array("0"=>"None"); //first option

        foreach($partners as $tid => $partner){
            $list[$partner->tid] = $partner->name;
        }

        $form['hr_partner'] = array(
            '#type' => 'select',
            '#options' => $list,
        );
}
    }

В вашем файле javascript /js/webform.js вы можете включить всю свою логику, чтобы проверить, какое значение выбрано в поле «Отдел», а затем отобразить правильное значение в полях «Партнеры». В то же время обновление исходных полей, которые вы добавили в качестве текстовых полей в пользовательском интерфейсе компонентов веб-формы.

Другие вопросы по теме