it-swarm.asia

إخفاء / إظهار حقول واجهة برمجة التطبيقات بشكل ديناميكي في Drupal 7

لقد أنشأت كيانًا باستخدام نموذج "إضافة جديد". الكيان نفسه لديه عدد محدود من المتغيرات الفعلية. لقد أضفت معظم البيانات الإضافية التي أحتاجها باستخدام الحقول المخصصة (أي واجهة برمجة التطبيقات الميدانية).

ما أريد القيام به في هذه المرحلة هو القدرة على إخفاء أحد الحقول ديناميكيًا استنادًا إلى قيمة حقل آخر. على سبيل المثال ، إذا كان الحقل المنسدل قد تم تعيين قيمته على لا ، فيجب إخفاء حقل آخر ، وإلا يجب إظهاره.

من ما يمكنني رؤيته ، من السهل إلى حد ما إضافة هذه الوظيفة إلى الحقول التي تم إنشاؤها باستخدام واجهة برمجة تطبيقات النموذج (أي عبر خاصية AJAX) ، ولكن هل هناك أي طريقة لتحقيق ذلك باستخدام الحقول المرفقة؟ ليس لدي أي مشاكل في استخدام جافا سكريبت مخصص إذا كان هذا هو المطلوب لحل هذا.

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 يمكنك استخدام $ form #states بدلاً من سكريبت jQuery المخصص. مثال:

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

انظر form_example/form_example_states.inc من وحدة أمثلة لمزيد من التفاصيل والأمثلة.

19
milkovsky

يجب أن تجرب الحقول الشرطية ، أعتقد أن هذه الوحدة أمر لا بد منه لهذه المهمة. يمكنك تعيين التبعيات بين الحقول على واجهة إدارة سهلة الاستخدام. على سبيل المثال ، يمكنك تعيين حقل A ليكون مرئيًا فقط إذا كان للحقل B قيمة " 1234 "، أو يمكنك تعيين C حقل النص ليكون مرئيًا فقط عند تحديد D الحقل ، أو تعيين E الحقل على غير مرئي إذا كان F تركز إلخ.

في نموذج التحميل ، سيتم تعيين هذه التبعيات من جانب العميل ، على عرض العقدة ، سيتم تعيين هذه التبعيات على جانب الخادم.

يمكنك تعيين هذه التبعيات على admin/structure/types/manage/[YOURCONTENTTYPESMACHINENAME]/dependencies.

Conditional Fields(مصدر الصورة: المشروع صفحة )

4
Sk8erPeter