2011-11-14 3 views
3

背景: Drupal 6では、多くの必須フィールドを持つ非常に長いCCKフォームを使用しています。私はまた、いくつかのユーザーに特別な権限を与えるモジュールを持っています。 1つの権限で、ユーザーは必須フィールドをスキップしてフォームを送信することができます。私は、ユーザに、(特権を持たないユーザに対して)送信を確認する前に必要ないくつかのフィールドをスキップしたことをユーザに警告したいと思います。デフォルトのCCKフォームの検証をプログラムでスキップ

質問: CCKフォームのデフォルト検証をスキップするにはどうすればよいですか? (具体的には、必須フィールド)

以前の研究:私は既にこれに対する答えを徹底的に調査しました。私はhook_form_alter()とおそらくafter_build()を使うべきであることを知っています。私はすでにしかし、検証が行儀の方法に変化が(必要なフィールドの例えばエラーが何も提出が発生しましたしない、残った)がなかった

$form['#validate'] = array(); 

を使用して検証をリセットしようとしています。

答えて

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); 
    } 
} 
完全にテストされていないのです

が、私はそれが

関連する問題