0

たくさんのCCKフィールドを持つフォームがあり、そのうちの1つはマスターの「リクエストタイプ」フィールドです。

マスターフィールドの状態に応じて、フォームの他のフィールドは必須です。

フォームの例:


{マスターフィールド}

{フィールド1}(常に必須、cckフォームで設定)

{垂直タブのグループをフィールドグループ化}{

-{フィールド2}(必須のIFマスターフィールド== '1')

-{フィールド3}(必要なIFマスターフィールド== '1' OR '2')

}


私はフォーム検証を使用してこれを達成しようとしています。この段階では、マスターフィールドをチェックせずにその場で必須フィールドを作成しようとしていますが、フォームの必須フィールドとしてレンダリングすることはできません...

function my_module_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) 
  {
   case 'my_node_node_form':
    $form['#validate'][] = 'my_module_form_validate';
    break;
   default:
    // nothing
    break;
  }
 }

function my_module_form_validate($form, &$form_state) {
  // there are so many versions of the same field, which one do I use?
  $form['#field_info']['field_two']['required'] = '1'; 
  $form['group_my_group']['field_two']['#required'] = '1';
  $form['group_my_group']['field_two'][0]['#required'] = 'TRUE';
 }

フォームを送信すると、取得するのはField One field is required.

検証関数の$formでprint_rダンプを実行すると、値を正常に変更しているが、必要に応じてレンダリングされていないことが示されます。

別のフィールド値に応じてフィールドを必須にするにはどうすればよいですか?

4

1 に答える 1

0

キーは使用しないことがわかりました$form['#validate'][]$form['#after_build'][]、このように

function my_module_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) 
  {
   case 'my_node_node_form':
    $form['#after_build'][] = 'my_module_form_after_build';
    break;
   default:
    // nothing
    break;
  }
 }

function my_module_form_after_build($form, &$form_state) {
  switch ($form['field_master_field']['#value']['value']) {
    case '2':
      $form['group_my_group']['field_three'][0]['value']['#required'] = TRUE;
    case '1':
      $form['group_my_group']['field_two'][0]['value']['#required'] = TRUE;
    case '0':
      $form['group_my_group']['field_one'][0]['value']['#required'] = TRUE;        
     break;
    }
   return $form;
  }

御馳走を働きます

于 2012-12-02T12:25:57.147 に答える