以编程方式跳过默认的CCK表单验证

时间:2011-11-14 18:08:30

标签: php drupal drupal-6

背景:在Drupal 6中,我有一个非常长的CCK表单,其中包含许多必填字段。我还有一个模块授予一些用户特殊权限。一个权限应该允许用户跳过必填字段并仍然能够提交表单。我想警告用户,在允许用户确认提交之前,他们会跳过某些字段(对于非特权用户)。

问题:如何跳过CCK表单的默认验证? (具体来说,必填字段)

之前的研究:我已经彻底搜索了这个答案。我知道我应该使用hook_form_alter(),也可能是after_build()。我已经尝试使用

重置验证
$form['#validate'] = array();

然而验证行为的方式没有变化(例如,所需字段的错误仍然存​​在,没有提交提交)。

2 个答案:

答案 0 :(得分:2)

设置$form['#validate'] = array();应该在一定程度上起作用(任何显式的验证处理程序将不再运行),但也可以将#element_validate键添加到大多数元素中,并且#required标志,用于设置默认表单验证。

我可以考虑删除这些约束的最简单方法是以递归方式遍历表单并取消设置流氓值。像这样:

function mymodule_unrequire_element(&$element) {
  if (isset($element['#required'])) {
    unset($element['#required']);
  }
  if (isset($element['#element_validate'])) {
    unset($element['#element_validate']);
  }

  foreach (element_children($element) as $child_element) {
    mymodule_unrequire_element($element[$child_element]);
  }
}

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'the_form_id') {
    mymodule_unrequire_element($form);
  }
}

这完全没有经过测试,但我认为它会做到这一点:)

答案 1 :(得分:0)

模块http://drupal.org/project/skip_validation提供跳过验证功能。看它可能会有所帮助。

相关问题