Я создаю веб-форму для создания формы подписки на Drupal 7.65.
Цель
Что мне нужно сделать, так это: выбрать роль из списка и автоматически отобразить связанное имя этой роли в текстовом поле. Как я уже сказал, имя должно отображаться в нередактируемом текстовом поле прямо под ним.
Допустим, действительный следующий список (key => value
)
Поле: отделение
и с тех пор соответствующие имена соответственно
Параметры могут отображаться в текстовом поле hr_business_partner
Таким образом, когда стажер выбирает «Человеческие ресурсы», имя «Гертруда Деф» должно появиться в текстовом поле под выбранным. Я прикрепил макет, чтобы лучше понять, что мне нужно.
ВАЖНЫЙ Я не могу поместить имена в список как значение, потому что ассоциация может меняться, но старые записи должны сохранять ранее зарегистрированные ассоциации.
используйте атрибуты, такие как «данные-человек», для каждой опции и выберите значение атрибута при изменении поля отдела в javascript/jquery. обратитесь к stackoverflow.com/questions/8345666/…, например
В дополнение к этому вы можете использовать модуль drupal.org/project/form_options_attributes для создания вашей формы.
Вы можете использовать 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 вы можете включить всю свою логику, чтобы проверить, какое значение выбрано в поле «Отдел», а затем отобразить правильное значение в полях «Партнеры». В то же время обновление исходных полей, которые вы добавили в качестве текстовых полей в пользовательском интерфейсе компонентов веб-формы.
проверить модуль условного поля drupal.org/project/conditional_fields