我在验证 Drupal 6 表单时遇到问题。
我有 2 个下拉菜单。第二个下拉列表(项目)的选项取决于第一个下拉列表(客户端)的选定选项。更改客户端时,我从该客户端获取所有项目。
现在,当验证表单时,选择另一个客户端作为 default_value,项目的选项与表单构建中的选项不同。这意味着,项目的选定选项不在为表单构建的选项数组中。
有什么方法可以更改选项数组以进行表单验证?验证中项目的选项数组是根据客户的选择构建的吗?
这里要实现的主要事情是,您的表单构建函数不仅在初始表单构建时调用一次,而且在表单提交时,在验证发生之前再次调用。因此,您可以调整表单构建功能,$options
为项目选择字段构建不同的数组,具体取决于所选客户端(如果选择了任何客户端)。
你可以通过检查来做到这一点$form_state['values']
,有点像这样:
function your_form(&$form_state) {
// ... other form building stuff
// Start with initial default options for project select
$project_options = array('- Please select client first -');
// Adjust, if client already selected
if (isset($form_state['values']) && $form_state['values']['your_client_select']) {
$selected_client = $form_state['values']['your_client_select'];
$project_options = your_function_to_build_project_options_by_client($selected_client);
}
// ... build project select using those options
// ... other form building stuff
}
您无需任何编码即可完成此操作。有一个名为Conditional fields的模块。此模块将允许您为表单设置规则。根据某些字段的某些值隐藏某些元素。