質問: drupal 7でfield apiフィールドを動的に非表示/表示する 「新規追加」フォームでエンティティを作成しました。エンティティ自体には、限られた数の実際の変数があります。カスタムフィールド(つまり、フィールドapi)を使用して、必要な追加データのほとんどを追加しました。この段階で私がする必要があるのは、別のフィールドの値に基づいて、あるフィールドを動的に非表示にすることができることです。つまり、ドロップダウンフィールドの値が[いいえ]に設定されている場合、別のフィールドを非表示にし、それ以外の場合は表示する必要があります。私が見ることができることから、form apiを使用して作成されたフィールドにこの機能を追加するのはやや簡単です(つまり、ajaxプロパティを介して)。しかし、添付フィールドを使用してそれを達成する方法はありますか?これを解決するために必要なものであれば、カスタムjavascriptを使用しても問題はありません。
回答: drupal 7では、カスタムjqueryスクリプトの代わりに$ form #statesを使用できます。例: $form['student_type'] = array( '#type' => 'radios', '#options' => array( 'high_school' => t('high school'), 'undergraduate' => t('undergraduate'), 'graduate' => t('graduate'), ), '#title' => t('what type of student are you?') ); // high school information. $form['high_school']['tests_taken'] = array( '#type' => 'checkboxes', '#options' => drupal_map_assoc(array(t('sat'), t('act'))), '#title' => t('what standardized tests did you take?'), // this #states rule says that this checkboxes array will be visible only // when $form['student_type'] is set to t('high school'). // it uses the jquery selector :input[name=student_type] to choose the // element which triggers the behavior, and then defines the "high school" // value as the one that triggers visibility. '#states' => array( 'visible' => array( // action to take. ':input[name="student_type"]' => array('value' => 'high_school'), ), ), ); 複数の値の条件に#statesを使用する場合の例を次に示します。 $form['student_type'] = array( '#type' => 'checkboxes', '#options' => array( 'high_school' => t('high school'), 'undergraduate' => t('undergraduate'), 'graduate' => t('graduate'), ), '#title' => t('what type of student are you?') ); // high school information. $form['high_school']['tests_taken'] = array( '#type' => 'textfield', '#title' => t('what standardized tests did you take?'), '#states' => array( 'visible' => array( // action to take. ':input[name="student_type[high_school]"]' => array('checked' => true), ':input[name="student_type[undergraduate]"]' => array('checked' => true), ':input[name="student_type[graduate]"]' => array('checked' => false), ), ), ); 詳細と例については、 examples module のform_example/form_example_states.incを参照してください。