it-swarm-id.com

Menyembunyikan / menampilkan bidang API Bidang secara dinamis di Drupal 7

Saya telah membuat entitas dengan formulir 'tambah baru'. Entitas itu sendiri memiliki sejumlah variabel aktual. Saya telah menambahkan sebagian besar data tambahan yang saya perlukan menggunakan Bidang khusus (yaitu API Bidang).

Apa yang perlu saya lakukan pada tahap ini adalah dapat secara dinamis menyembunyikan satu bidang berdasarkan nilai yang lain. yaitu jika bidang tarik-turun nilainya diatur ke Tidak, bidang lain harus disembunyikan, jika tidak akan ditampilkan.

Dari apa yang saya lihat, agak mudah untuk menambahkan fungsi ini ke bidang yang dibuat menggunakan API Formulir (yaitu melalui properti AJAX), namun apakah ada cara untuk mencapainya menggunakan bidang terlampir? Saya tidak punya masalah menggunakan Javascript khusus jika itu yang diperlukan untuk menyelesaikan ini.

14
NRaf

jQuery berfungsi dengan baik untuk ini:

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

Dalam Drupal 7 Anda dapat menggunakan $ form #states bukan skrip jQuery khusus. Contoh:

  $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'),
      ),
    ),
  );

Ini adalah contoh jika Anda ingin menggunakan #states untuk beberapa kondisi nilai:

 $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),
      ),
    ),
  );

Lihat form_example/form_example_states.inc from modul contoh untuk detail dan contoh lebih lanjut.

19
milkovsky

Anda harus mencoba Conditional Fields , saya pikir modul ini harus dimiliki untuk tugas ini. Anda dapat mengatur dependensi antar bidang pada antarmuka admin yang mudah digunakan. Misalnya, Anda dapat mengatur bidang A menjadi hanya yang terlihat jika bidang B memiliki nilai " 1234 ", atau Anda dapat mengatur bidang teks C menjadi hanya terlihat ketika bidang D dicentang, atau setel bidang E ke tidak terlihat jika F adalah terfokus dll.

Pada formulir unggahan, dependensi ini akan diatur di sisi klien, pada tampilan node, dependensi ini akan ditetapkan di sisi server.

Anda dapat mengatur dependensi ini pada admin/structure/types/manage/[YOURCONTENTTYPESMACHINENAME]/dependencies.

Conditional Fields(Sumber gambar: proyek halaman )

4
Sk8erPeter