Drupal7: в реальном времени связать выбранное поле с текстовым полем в Drupal7 - PullRequest
0 голосов
/ 09 апреля 2019

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

Цель

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

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

Поле: Отдел

  • business_manager | Бизнес-менеджер
  • hr_consultant | Человеческие ресурсы
  • training_developer | Обучающий разработчик

и с того времени, связанные имена, соответственно

Опции могут отображаться в текстовом поле hr_business_partner

  • Стив Абк
  • Гертруда Деф
  • Sven Hgj Klm

Таким образом, когда слушатель выбирает « Human Resources », имя « Gertrude Def » должно появиться в текстовом поле под выбранным. Я прикрепил макет, чтобы лучше понять, что мне нужно.

mokup webform

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

1 Ответ

1 голос
/ 24 июня 2019

Вы можете использовать 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 вы можете включить всю свою логику, чтобы проверить, какое значение выбрано в поле «Отдел», а затем отобразить правильное значение в полях «Партнеры». В то же время обновите исходные поля, добавленные в виде текстовых полей в пользовательском интерфейсе компонентов веб-формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...