我正在Drupal 7.65上创建一个Web表单以建立订阅表单
目标
我需要做的是:从列表中选择一个角色,并自动在文本字段中显示该角色的关联名称。 正如我所说,该名称应显示在其下方不可修改的文本字段中。
假设以下列表(key => value
)有效
字段:部门
以及以后的名称分别是
选项可以显示在文本字段hr_business_partner
因此,当学员选择“ 人力资源”时,“ Gertrude Def ”的名称应显示在所选人员下方的文本字段中。 我附上了模型,以更好地了解我的需求。
重要 我不能将名称作为值放入列表中,因为关联可以更改,但旧记录应保留以前注册的关联
答案 0 :(得分:1)
您可以使用hook_form_alter()并将新的选择字段与所需的成对键值列表一起添加到Web表单。然后使用javascript更新更改后,哪些字段值将显示在HR业务合作伙伴字段中,顺便说一句,还需要通过hook_form_alter添加。您可以使用分类法维护部门/业务伙伴的列表,这些列表将填充您的部门和业务伙伴。
编写一些JavaScript来动态更新未通过form_alter添加的原始字段。我建议在您的Webform组件中创建两个文本字段,这些文本字段将保留表单中添加的字段的值。这样用户选择的这些值将保存在您的表单中。
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中,您可以包含所有逻辑以检查在“部门”字段中选择了哪个值,然后在“合作伙伴”字段中显示正确的值。同时,更新在Webform组件UI中作为文本字段添加的原始字段。