3

我在验证 Drupal 6 表单时遇到问题。

我有 2 个下拉菜单。第二个下拉列表(项目)的选项取决于第一个下拉列表(客户端)的选定选项。更改客户端时,我从该客户端获取所有项目。

现在,当验证表单时,选择另一个客户端作为 default_value,项目的选项与表单构建中的选项不同。这意味着,项目的选定选项不在为表单构建的选项数组中。

有什么方法可以更改选项数组以进行表单验证?验证中项目的选项数组是根据客户的选择构建的吗?

4

2 回答 2

2

这里要实现的主要事情是,您的表单构建函数不仅在初始表单构建时调用一次,而且在表单提交时,在验证发生之前再次调用。因此,您可以调整表单构建功能,$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
}
于 2012-05-07T10:42:08.217 回答
0

您无需任何编码即可完成此操作。有一个名为Conditional fields的模块。此模块将允许您为表单设置规则。根据某些字段的某些值隐藏某些元素。

于 2012-05-11T09:30:27.343 回答