2013-08-29 19 views
2

我需要忽略兩個表單字段的驗證,同時創造在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 

注意,我可以不會壓制「所需」財產,因爲它在其他地方以更復雜的形式使用。

感謝

+0

請不要在一個問兩個問題;如果您有兩個問題,請提出兩個不同的問題。 –

+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); 
+0

我會試試這個。感謝您的詳細示例。 –

0

不能使用hook_form_alter來剿「必需」屬性,只有當在它的「複雜」的形式不使用?例如,如果您知道使用「複雜」表單的路徑,則可以檢查是否使用arg服務路徑。

更好的檢查可能是可用...