Drupal 6 - 忽略必填表格字段

时间:2013-08-29 14:25:59

标签: forms validation drupal drupal-6

我需要在Drupal 6中创建用户时忽略两个表单字段的验证,但我根本不知道怎么做:

  $userinfo = array(
    'name' => $login,
    'init' => $mail,
    'mail' => $mail,
    'pass' => $password,
    'status' => 1,
    'lastname' => "", //how to ignore those required fields that invalidate the form
    'surname' => ""   //how to ignore those required fields that invalidate the form
  );

  // register a new user
  $form_state = array();
  $form_state['values'] = $userinfo;
  drupal_execute('user_register', $form_state);
  $errors = form_get_errors(); // getting 2 required field errors

请注意,我无法抑制“必需”属性,因为它在其他地方以更“复杂”的形式使用。

由于

2 个答案:

答案 0 :(得分:1)

我没有一个D6网站方便测试这个,但我认为它会工作......

由于drupal_execute()会引导您完成整个表单构建过程,因此您可以利用hook_form_alter()删除所需的状态,但仅限于您在$form_state中传递的上下文中。例如

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register' && !empty($form_state['custom_execution'])) {
    $form['lastname']['#required'] = FALSE;
    // etc...
  }
}

...

$form_state = array();
$form_state['values'] = $userinfo;
$form_state['custom_execution'] = TRUE;
drupal_execute('user_register', $form_state);

答案 1 :(得分:0)

不能使用hook_form_alter来抑制“必需”属性,只有当from不以“复杂”形式使用时才会使用吗?

例如,如果您知道使用“复杂”表单的路径,则可以检查该路径是否与arg一起提供。

可以提供更好的检查......