Drupal 7 में फील्ड एपीआई फ़ील्ड को छिपाना / दिखाना


14

मैंने 'नया जोड़ें' फ़ॉर्म के साथ एक इकाई बनाई है। इकाई के पास स्वयं सीमित संख्या में वास्तविक चर हैं। मैंने कस्टम फ़ील्ड्स (अर्थात फ़ील्ड API) का उपयोग करके अधिकांश अतिरिक्त डेटा जोड़ा है।

इस स्तर पर मुझे जो करने की आवश्यकता है वह एक क्षेत्र को दूसरे के मूल्य के आधार पर गतिशील रूप से छिपाने में सक्षम है। यानी यदि एक ड्रॉप-डाउन फ़ील्ड में इसका मूल्य नहीं के बराबर है, तो किसी अन्य फ़ील्ड को छिपाया जाना चाहिए, अन्यथा इसे दिखाया जाना चाहिए।

मैं जो देख सकता हूं, उससे यह आसान है कि फॉर्म एपीआई (अर्थात AJAX संपत्ति के माध्यम से) का उपयोग करके बनाए गए फ़ील्ड में इस कार्यक्षमता को जोड़ना आसान है, लेकिन क्या संलग्न फ़ील्ड का उपयोग करके इसे प्राप्त करने का कोई तरीका है? मेरे पास कस्टम जावास्क्रिप्ट का उपयोग करने के लिए कोई समस्या नहीं है यदि ऐसा है तो इसे हल करने के लिए क्या आवश्यक है।


मुझे यकीन नहीं है कि drupal.org/project/conditional_fields अभी तक d7 के लिए जाने के लिए तैयार है, लेकिन यह देखने लायक हो सकता है
Jukebox

जवाबों:


5

jQuery इसके लिए अच्छा काम करता है:

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

हाँ, मैंने प्रपत्र पृष्ठ पर drupal_add_js का उपयोग करके समाप्त कर दिया और इसे jQuery में कर दिया। मैं बस सोच रहा था कि क्या ऐसा करने के लिए एक और 'ड्रुपल' तरीका था।
एनआरएफ़

मैं उल्लेख करता हूं कि मैं द्रुपाल #states के दृश्यता के लिए एक बड़ा प्रशंसक नहीं हूं, यही वजह है कि मैंने इसे ऊपर सुझाव नहीं दिया।
कीथम

@keithm आप विस्तार से बता सकते हैं कि आप राज्यों के प्रशंसक क्यों नहीं हैं (2015, D7)। मैं एक ऐसी परियोजना पर काम कर रहा हूँ जहाँ हम #states बनाम drupal_add_js का उपयोग करने का निर्णय लेने की कोशिश कर रहे हैं। आपको क्यों लगता है कि एक दूसरे से बेहतर विकल्प है?
ब्लू 928

यह मेरी राय में वैध प्रोग्रामर वरीयता की बात है; मेरा औचित्य आपसे अलग हो सकता है। उस ने कहा, व्यवहार में मैं दूसरे सिंटैक्स का सहारा लेना पसंद नहीं करता हूं जो जावास्क्रिप्ट / jQuery में पाई गई कार्यक्षमता को डुप्लिकेट करता है। जब मैंने #states की कोशिश की है, तो मुझे उपयोग के मामले भी मिले जिनके लिए यह स्पष्ट रूप से बहुत सीमित है। जब मेरी समस्या इन उपयोग मामलों के बाहर बढ़ गई, तो मुझे सीधे जावास्क्रिप्ट में पूरी बात को फिर से लिखना था।
कीथम

19

Drupal 7 में आप #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 से देखें ।


बोलते हुए #states, मैंने कभी भी अधिक जटिल दृश्यता स्थितियों को परिभाषित करने का एक तरीका नहीं पाया है, जैसे: नियंत्रण ए को छुपाना जब नियंत्रण बी मूल्य सरणी (x, y, z) में होता है। क्या आप इसके लिए एक सिंटैक्स जानते हैं?
आर्टुर

1
ऊपर मेरा अपडेट देखें
दूधोव्स्की

4

आपको सशर्त फ़ील्ड्स आज़माना चाहिए , मुझे लगता है कि यह मॉड्यूल इस कार्य के लिए बहुत जरूरी है। आप उपयोगकर्ता के अनुकूल व्यवस्थापक इंटरफ़ेस पर फ़ील्ड के बीच निर्भरता सेट कर सकते हैं। उदाहरण के लिए, आप Aफ़ील्ड को केवल दृश्यमान होने के लिए सेट कर सकते हैं यदि Bफ़ील्ड में " 1234 " का मान है , या आप फ़ील्ड के चेक होने या सेट होने पर ही दिखाई देने केC लिए टेक्स्ट फ़ील्ड सेट कर सकते हैंDE करने के लिए क्षेत्र अदृश्य अगर Fहै ध्यान केंद्रित आदि

अपलोड फॉर्म पर, ये निर्भरताएँ क्लाइंट-साइड सेट की जाएंगी, नोड डिस्प्ले पर, ये निर्भरताएँ सर्वर-साइड पर सेट की जाएंगी।

आप इन पर निर्भरता निर्धारित कर सकते हैं admin/structure/types/manage/[YOURCONTENTTYPESMACHINENAME]/dependencies

सशर्त क्षेत्र (छवि का स्रोत: परियोजना का पृष्ठ )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.