it-swarm-ja.com

Drupal 7でField APIフィールドを動的に非表示/表示する

「新規追加」フォームでエンティティを作成しました。エンティティ自体には、限られた数の実際の変数があります。カスタムフィールド(つまり、フィールドAPI)を使用して、必要な追加データのほとんどを追加しました。

この段階で私がする必要があるのは、別のフィールドの値に基づいて、あるフィールドを動的に非表示にすることができることです。つまり、ドロップダウンフィールドの値が[いいえ]に設定されている場合、別のフィールドを非表示にし、それ以外の場合は表示する必要があります。

私が見ることができることから、Form APIを使用して作成されたフィールドにこの機能を追加するのはやや簡単です(つまり、AJAXプロパティを介して)。しかし、添付フィールドを使用してそれを達成する方法はありますか?これを解決するために必要なものであれば、カスタムJavaScriptを使用しても問題はありません。

14
NRaf

jQueryはこれに適しています。

(function($) {
  $(document).ready(function() {
    $('#select1').change(function() {
      switch ($(this).val()) {
        case '1':
          $('#field2').hide();
          break;
        default:
          $('#field2').show();
          break;
      }
    });
  });
}) (jQuery);
5
keithm

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 moduleform_example/form_example_states.incを参照してください。

19
milkovsky

Conditional Fields を試してみてください。このモジュールは、このタスクに欠かせないものだと思います。ユーザーフレンドリーな管理インターフェースのフィールド間の依存関係を設定できます。たとえば、Aフィールドに値visibleのみを設定できます。Bフィールドの値が "1234"の場合、またはCテキストフィールドをvisibleに設定できます= Dフィールドがチェックされている場合、またはEフィールドをinvisibleに設定した場合のみFfocusedなどの場合.

アップロードフォームでは、これらの依存関係はクライアント側で設定され、ノードの表示では、これらの依存関係はサーバー側で設定されます。

これらの依存関係はadmin/structure/types/manage/[YOURCONTENTTYPESMACHINENAME]/dependenciesで設定できます。

Conditional Fields(画像のソース:プロジェクトの ページ

4
Sk8erPeter