ट्रिगर #states के लिए एकाधिक मान


18

मैं फॉर्म एपीआई के #states को कई मान कैसे दे सकता हूं?

उदाहरण के लिए कहें, मैं चाहता था कि यह क्षेत्र न केवल तभी दिखाई दे, जब मूल्य 5 (वर्तमान में नीचे काम करता है), बल्कि मान 3, 4 या 5 होने पर क्षेत्र को दृश्यमान बनाना चाहता था।

'#states' => array(
    'visible' => array(
       ':input[name="field_star_rating"]' => array('value' => t('5')),
    ),
),

एक नोट के रूप में, मैंने निम्नलिखित की कोशिश की और यह काम नहीं करता है । यह केवल तभी काम करता है जब मान '4' हो

'#states' => array(
    'visible' => array(
        ':input[name="field_star_rating"]' => array('value' => t('5')),
        ':input[name="field_star_rating"]' => array('value' => t('4')),
    ),
),

यह भी काम नहीं करता है , यह केवल तभी काम करता है जब मान '4' हो:

'#states' => array(
    'visible' => array(
        ':input[name="field_star_rating"]' => array('value' => t('5'), 'value' => t('4')),
    ),
),

जवाबों:


39

यहाँ आपको क्या चाहिए:

'#states' => array(
    'visible' => array(
        ':input[name="field_star_rating"]' => array(
            array('value' => t('5')),
            array('value' => t('4'))
        ),
    ),
),

यह वास्तव में सही तरीका है, सही के रूप में चिह्नित वर्तमान गलत है। अधिक जानकारी के लिए इस मुद्दे को देखें: drupal.org/node/735528
रॉबिन

#States API यकीन है कि 2011 में एक लंबा रास्ता तय कर चुका है। सही रूप में चिह्नित करना।
1

यह एक महान जवाब है, और मैं Google से एक दर्जन बार की तरह यहां आया था ... एक इनाम अपने रास्ते पर है।
आयुष

यह सामान्य दृश्य के लिए ठीक काम कर रहा है। किसी भी 'अजाक्स' को चलाने के बाद, यह बार-बार जोड़ा जाता है
गुरु

3

केवल तरीका मैं समझ सकता हूं कि डी 7 में #ajax का उपयोग करना है।

यहाँ कुछ सहायक टिप हैं I काश मैं शुरू करने से पहले जान लेता।

  1. एपीआई में #ajax कमाल का है और सीखने लायक है
  2. #states OR या XOR का समर्थन नहीं करता (पैच के बिना? http://drupal.org/node/735528 )
  3. DPM ($ फार्म); और एक कस्टम सबमिट फ़ंक्शन पर var_dump ($ form_state) अनमोल हैं

यहाँ उदाहरण मॉड्यूल से AJAX उदाहरणों में से एक का संशोधित संस्करण है।

function plugin_autotextfields($form, &$form_state) {

    $form['star_rating'] = array(
        '#type' => 'select',
        '#title' => t('Star Rating'),
        '#options' => array('_none' => '- select -', 5 => '5 Star', 4 => '4 Star', 3 => '3 Star', 2 => '2 Star', 1 => '1 Star'),
        '#ajax' => array(
            'callback' => 'plugin_autotextfields_callback',
            'wrapper' => 'textfields',
            'effect' => 'fade',
        ),
    );

    $form['textfields'] = array(
        '#title' => t("Fieldset Name"),
        '#prefix' => '<div id="textfields">',
        '#suffix' => '</div>',
        '#type' => 'fieldset',
        '#description' => t('Where the field will be placed'),
    );

    if (!empty($form_state['values']['star_rating']) && $form_state['values']['star_rating'] == 5) {
        $form['textfields']['review'] = array(
            '#type' => 'textfield',
            '#title' => t('Message if 5 stars'),
        );
    } else if (!empty($form_state['values']['star_rating'])) {
        $form['textfields']['review'] = array(
            '#type' => 'textfield',
            '#title' => t('Message if not 5 stars'),
        );
    }

    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Click Me'),
    );

    return $form;
}

function omfg_autotextfields_callback($form, $form_state) {
    return $form['textfields'];
}

मुझे आशा है कि यह किसी को उसी समस्या में चलाने में मदद करता है :)


वाह! बहुत मददगार जवाब मेरे दोस्त। मैं #states के साथ एक मुद्दे के आसपास अपना सिर लपेटता रहा हूं और अब यह काम कर रहा है, लेकिन # आज स्पष्ट रूप से आसान हो जाएगा कि आपने मुझे एक थप्पड़-छड़ी के साथ थप्पड़ मारा। और उस डिबगिंग टिप को बोनस के रूप में? क्षमा करें, मुझे आपको कर्म फल के साथ भुगतान करना होगा। ;)
स्टेफोसोसेलिन

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

PS अधिक सुविधाओं के लिए उदाहरण मॉड्यूल देखें "form_example / form_example_states.inc"

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