web-gelistirme-sc.com

Alan API alanlarını Drupal 7) içinde dinamik olarak gizleme / gösterme

'Yeni ekle' formuna sahip bir varlık oluşturdum. İşletmenin sınırlı sayıda gerçek değişkeni vardır. Özel Alanlar (yani Alan API'sı) kullanarak ihtiyacım olan ekstra verilerin çoğunu ekledim.

Bu aşamada yapmam gereken şey, bir alanı diğerinin değerine göre dinamik olarak gizleyebilmektir. Bir açılır alanın değeri Hayır olarak ayarlanmışsa, başka bir alan gizlenmelidir, aksi takdirde gösterilmelidir.

Ne görebiliyorum, bu API Form API kullanılarak oluşturulan alanlara eklemek kolaydır (yani AJAX özelliği), ancak ekli alanları kullanarak elde etmek için herhangi bir yolu var mı? Bunu çözmek için gereken bu özel Javascript kullanarak hiçbir sorunları var.

14
NRaf

jQuery bunun için iyi çalışır:

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

Drupal 7 içinde $ form #states özel jQuery komut dosyası yerine. Misal:

  $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 birden çok değer koşulu için:

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

Bkz. form_example/form_example_states.inc from örnekler modülü daha fazla bilgi ve örnek için.

19
milkovsky

Deneyin Koşullu Alanlar , bu modülün bu görev için bir zorunluluk olduğunu düşünüyorum. Kullanıcı dostu bir yönetici arayüzündeki alanlar arasında bağımlılıklar ayarlayabilirsiniz. Örneğin, A alanının değeri varsa B alanını yalnızca görünür olacak şekilde ayarlayabilirsiniz " 1234 "veya C metin alanını yalnızca görünür olacak şekilde ayarlayabilirsiniz D alanı işaretlendiğinde veya E alanını görünmez olarak ayarlarsa, F ise odaklı vb.

Karşıya yükleme formunda, bu bağımlılıklar istemci tarafında, düğüm ekranında, bu bağımlılıklar sunucu tarafında ayarlanır.

Bu bağımlılıkları admin/structure/types/manage/[YOURCONTENTTYPESMACHINENAME]/dependencies.

Conditional Fields(Resmin kaynağı: projenin sayfa )

4
Sk8erPeter